我希望保持我的子类通用性,并且所有我想要改变的只是 ArrayList 的
add(Object)
方法,使其在调用 arrayList.add(null)
时不添加任何内容(ArrayList 的正常实现会添加 null
,但我希望它什么也不做)。import java.util.ArrayList;
public class MyArrayList<T> extends ArrayList<T> {
public boolean add(T element) {
if (element != null) return super.add(element);
return false;
}
}
这是一个例子,您应该优先选择组合而不是继承。
与其扩展ArrayList
,您应该创建一个类,该类具有一个ArrayList
成员字段并公开一个add
方法来处理正确的操作。
阅读Effective Java。 这里是描述此问题的示例。
想限制List中的内容是完全值得尊重的,但是默默地忽略参数是有问题的。不过,这就是为什么我们有Apache Commons Collections。可能还有Guava等效工具。使用它们之一来声明ArrayList
的final
子类,这样就没有人可以破坏您的意图。
你有没有考虑实现一个过滤器,在调用add方法时进行过滤?如果它只在代码中的一个地方被调用,那么这可能是最简单的方法。一个简单的if语句可能会起作用。
if (input/object != null) {
arrayList.add(input/object);
}
else {
//do something else instead, or nothing
}
ArrayList<T>
(或任何List<T>
)添加元素:add(T)
、add(int,T)
、addAll(Collection<T>)
、addAll(int,Collection<T>)
,通过构造函数以及通过Iterator<T>
和ListIterator<T>
的add
方法,并且可以通过以任何一种方式修改使用subList
返回的视图来添加元素。您需要处理所有这些吗? - trutheality