我现有的代码库有时会使用 ArrayList 或 LinkedList,我需要找到一种方法来在调用添加或删除时进行记录,以跟踪已添加或删除的内容。
确保我已登录的最佳方法是什么?
例如。
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(123);
和
LinkedList<Integer> anotherNewList = new LinkedList<Integer>();
anotherNewList.add(333);
不确定我是否可以拦截 add 方法来实现此目的,或者创建实现 java.util.List 接口(interface)的重写类然后改用它。无论哪种方式,我都在寻找一个好的解决方案,它需要最少的干预并且最好不使用任何第三方包......
最佳答案
我会使用所谓的 Decorator Pattern包装您的列表。
这将是一个简单的示例代码,只是为了给您一个想法:
private static class LogDecorator<T> implements Collection<T> {
private final Collection<T> delegate;
private LogDecorator(Collection<T> delegate) {this.delegate = delegate;}
@Override
public int size() {
return delegate.size();
}
@Override
public boolean isEmpty() {
return delegate.isEmpty();
}
@Override
public boolean contains(Object o) {
return delegate.contains(o);
}
@Override
public Iterator<T> iterator() {
return delegate.iterator();
}
@Override
public Object[] toArray() {
return delegate.toArray();
}
@Override
public <T1> T1[] toArray(T1[] a) {
return delegate.toArray(a);
}
@Override
public boolean add(T t) {
// ADD YOUR INTERCEPTING CODE HERE
return delegate.add(t);
}
@Override
public boolean remove(Object o) {
return delegate.remove(o);
}
@Override
public boolean containsAll(Collection<?> c) {
return delegate.containsAll(c);
}
@Override
public boolean addAll(Collection<? extends T> c) {
return delegate.addAll(c);
}
@Override
public boolean removeAll(Collection<?> c) {
return delegate.removeAll(c);
}
@Override
public boolean retainAll(Collection<?> c) {
return delegate.retainAll(c);
}
@Override
public void clear() {
delegate.clear();
}
}
关于java - 如何为现有代码记录List接口(interface)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41240104/