我想保持我的子类是通用的,我想要改变的是ArrayList的add(Object)
方法,这样当你调用arrayList.add(null)
时它就不会添加任何东西(ArrayList的正常实现将会添加null
;我希望它什么也不做。
答案 0 :(得分:14)
在这种情况下,你真的应该支持组合而不是继承,因为如果你忘记覆盖ArrayList中添加/更改元素的方法之一(你可能忘记覆盖set,例如),它仍然可以有空元素。
但是由于问题是如何将ArrayList子类化,所以你可以这样做:
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;
}
}
答案 1 :(得分:10)
这是一个你应该支持组合而不是继承的例子。
您应该创建一个具有ArrayList
成员字段的类,而不是扩展ArrayList
,并公开一个做正确事情的add
方法。
阅读Effective Java。以下是专门描述此问题的example。
答案 2 :(得分:0)
您是否考虑过实施过滤器来调用add方法?如果只从代码中的一个地方调用它,那么这可能是最简单的。一个简单的if语句可能有用。
if (input/object != null) {
arrayList.add(input/object);
}
else {
//do something else instead, or nothing
}
答案 3 :(得分:0)
想要限制进入List的内容是完全可敬的,尽管默默地忽略一个参数是值得怀疑的。不过,这就是我们Apache Commons Collections的原因。可能有番石榴等同物。使用其中一个来声明final
的{{1}}子类,这样就没有人能够颠覆你的意图。