import java.util.ArrayList; import java.util.Collection; import lombok.experimental.Delegate; public class DelegationExample { private interface SimpleCollection { boolean add(String item); boolean remove(Object item); } @Delegate(types=SimpleCollection.class) private final Collection collection = new ArrayList(); } class ExcludesDelegateExample { long counter = 0L; private interface Add { boolean add(String x); boolean addAll(Collection x); } @Delegate(excludes=Add.class) private final Collection collection = new ArrayList(); public boolean add(String item) { counter++; return collection.add(item); } public boolean addAll(Collection col) { counter += col.size(); return collection.addAll(col); } }