Forwarding Class Example
effective-java, java
Solution
Yes, you are correct, `ForwardingSet` delegates/forwards all of it's calls to a backing set.
You might want to have a look at a working example in a popular library Guava: ForwardingMap.
Problem
Reading Effective Java, I saw the following example from `Item 16: Favor composition over inheritance`. In the below `InstrumentedSet`, the book shows we can keep track of how many times an element was inserted (via the `InstrumentedSet.addCount` variable). To do this, we can simply append to this class object's `addCount`, and then call `ForwardingSet.add()`, which calls the actual `Set` class's actual implementation of `add()`. ``` // Reusable forwarding class public class ForwardingSet<E> implements Set<E> { private final Set<E> s; public ForwardingSet(Set<E> s) { this.s = s; } public void clear() { s.clear(); } public boolean contains(Object o) { return s.contains(o); } ... } // Wrapper class - uses composition in place of inheritance public class InstrumentedSet<E> extends ForwardingSet<E> { private int addCount = 0; public InstrumentedSet(Set<E> s) { super(s); } @Override public boolean add(E e) { addCount++; return super.add(e); } ... } ``` Am I correct in understanding that, to use this pattern/approach, it's necessary for the `Forwarding*` class to call all of its parent class's methods (in this case `Set`)?