@Override
 public void add(int index, O element) {
   if (element == null) {
     throw new NullPointerException();
   }
   if (handler.canAdd(element)) {
     delegate.add(index, element);
     handler.added(element);
   }
 }
 @Override
 public O set(int index, O element) {
   if (element == null) {
     throw new NullPointerException();
   }
   O oldValue = delegate.set(index, element);
   if (oldValue != element) {
     handler.removed(oldValue);
     handler.added(element);
   }
   return oldValue;
 }
 @Override
 public O remove(int index) {
   O oldValue = delegate.remove(index);
   if (oldValue != null) {
     handler.removed(oldValue);
   }
   return oldValue;
 }