import java.util.ArrayList; import java.util.Collection; import lombok.Delegate; public class DelegateExample { long counter = 0L; @Delegate private final Collection collection = new ArrayList(); public boolean add(String name) { counter++; return collection.add(name); } @java.lang.SuppressWarnings("all") public int size() { return this.collection.size(); } @java.lang.SuppressWarnings("all") public boolean isEmpty() { return this.collection.isEmpty(); } @java.lang.SuppressWarnings("all") public boolean contains(final java.lang.Object arg0) { return this.collection.contains(arg0); } @java.lang.SuppressWarnings("all") public java.util.Iterator iterator() { return this.collection.iterator(); } @java.lang.SuppressWarnings("all") public java.lang.Object[] toArray() { return this.collection.toArray(); } @java.lang.SuppressWarnings("all") public T[] toArray(final T[] arg0) { return this.collection.toArray(arg0); } @java.lang.SuppressWarnings("all") public boolean remove(final java.lang.Object arg0) { return this.collection.remove(arg0); } @java.lang.SuppressWarnings("all") public boolean containsAll(final java.util.Collection arg0) { return this.collection.containsAll(arg0); } @java.lang.SuppressWarnings("all") public boolean addAll(final java.util.Collection arg0) { return this.collection.addAll(arg0); } @java.lang.SuppressWarnings("all") public boolean removeAll(final java.util.Collection arg0) { return this.collection.removeAll(arg0); } @java.lang.SuppressWarnings("all") public boolean retainAll(final java.util.Collection arg0) { return this.collection.retainAll(arg0); } @java.lang.SuppressWarnings("all") public void clear() { this.collection.clear(); } } class PartialDelegationExample { @Delegate({SimpleCollection.class}) private final Collection collection = new ArrayList(); private interface SimpleCollection { boolean add(String item); boolean remove(Object item); } @java.lang.SuppressWarnings("all") public boolean add(final java.lang.String item) { return this.collection.add(item); } @java.lang.SuppressWarnings("all") public boolean remove(final java.lang.Object item) { return this.collection.remove(item); } }