10

我想保持我的子类通用,我想改变的是add(Object)ArrayList 的方法,这样当你调用它时它就不会添加任何东西arrayList.add(null)(ArrayList 的正常实现会添加null; 我希望它什么都不做)。

4

4 回答 4

14

在这种情况下,您确实应该支持组合而不是继承,因为如果您忘记覆盖 ArrayList 中添加/更改元素的方法之一(例如,您可能忘记覆盖 set),仍然可能有 null 元素.

但由于问题是关于如何继承 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;
    }
}
于 2012-05-06T23:20:03.310 回答
10

这是一个应该支持组合而不是继承的示例。

ArrayList您应该创建一个具有ArrayList成员字段并公开add执行正确操作的方法的类,而不是扩展。

阅读有效的 Java。这是专门描述此问题的示例。

于 2012-05-06T23:11:33.900 回答
0

您是否考虑过在其中调用 add 方法的过滤器?如果仅从代码中的一个位置调用它,那么这可能是最简单的。一个简单的 if 语句可能会起作用。

if (input/object != null) { 
    arrayList.add(input/object);
} 
else { 
    //do something else instead, or nothing
}
于 2014-09-05T06:44:32.003 回答
0

想要限制列表中的内容是完全值得尊敬的,尽管默默地无视一个论点是值得怀疑的。尽管如此,这就是我们拥有Apache Commons Collections的原因。可能有一个番石榴等价物。使用其中一个来声明 的final子类ArrayList,所以没有人可以颠覆你的意图。

于 2017-05-07T00:18:52.223 回答