我想保留我的子类通用,并且我想要更改的是ArrayList的add(Object)
方法,以便在您调用arrayList.add(null)
时不会添加任何内容(ArrayList的正常实现将添加null
;我希望它可以执行没有)。Java - 如何子类化通用ArrayList,以便MyArrayList <foo>的实例将是ArrayList <foo>的子类?
9
A
回答
13
在这种情况下,你真的应该喜欢合成而不是继承,因为如果你忘记覆盖ArrayList中添加/更改元素的方法之一(例如,你可能忘记覆盖集合),它仍然是可能的有空元素。
但由于问题是关于如何继承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;
}
}
10
这是一个例子,你应该赞成合成而不是继承。
而不是延长ArrayList
,你应该创建一个类,它有一个ArrayList
成员字段,并公开add
方法做正确的事情。
阅读Effective Java。这里是专门描述这个问题的example。
0
你有没有考虑实施一个过滤器,Add方法将被称为?如果它只从代码中的一个地方被调用,那么这可能是最简单的。一个简单的if语句可能工作。
if (input/object != null) {
arrayList.add(input/object);
}
else {
//do something else instead, or nothing
}
0
这是非常值得尊敬想限制什么进入一个名单,但无论默默的说法值得商榷。不过,这就是为什么我们有Apache Commons Collections。可能有一个番石榴等价物。使用其中的一个来声明final
的子类ArrayList
,所以没有人可以颠覆你的意图。
相关问题
- 1. 更改属性ArrayList <Class>到ArrayList <SubClass>在子类
- 2. 无法实例化类型迭代器<ArrayList <Integer>>
- 3. Arraylist的子类
- 4. Android上的简单XML - 类MyArrayList <E>扩展ArrayList <E>?
- 5. Java将ArrayList <Integer>添加到ArrayList <ArrayList <Integer>>替换ArrayList的ArrayList的所有元素
- 6. ArrayList的用法<ArrayList<E>>
- 7. Transpose ArrayList <ArrayList <String>> in Java
- 8. 将ArrayList <ArrayList<E>>转换为Java中的E [] []
- 9. 排序ArrayList对象的抽象类的子类的实例
- 10. 如何将ArrayList <Object>转换为ArrayList <String>或ArrayList <Timestamp>?
- 11. JAVA的ArrayList <Arraylist>的深拷贝
- 12. 如何实例化ArrayList <?>并通过Java反射添加项目?
- 13. ArrayList的问题<ArrayList <String>>
- 14. 如何将ArrayList()或ArrayList <String>中的对象转换为ArrayList <Integer>?
- 15. 从超类Java实例化子类Java
- 16. 如何通过ArrayList <SubClass> as ArrayList <BaseClass>
- 17. 如何查找容器深度(例如:ArrayList <String> = 1,ArrayList <ArrayList <String>> = 2)?
- 18. ArrayList泛型:子类
- 19. 将ArrayList <String>转换为ArrayList <SomeClass> java
- 20. java将ArrayList <StringBuilder>转换为ArrayList <String>
- 21. ArrayList <Object <ArrayList <Object> >>
- 22. 初始化的ArrayList <ArrayList的<Integer>>
- 23. Java的可迭代<Iterable<T>>到ArrayList的<ArrayList<T>>
- 24. 将类的实例添加到arraylist
- 25. MalformedParameterizedTypeException当使用ArrayList <ArrayList<>>
- 26. 如何将ArrayList <ArrayList <Integer>>转换为int [] []?
- 27. 新的ArrayList <Class>()或新的ArrayList <>()在Java中?
- 28. 为继承创建ArrayList <Item>的子类
- 29. 初始化ArrayList <ArrayList <Int>>在kotlin中的大小
- 30. java-如何将一个ArrayList <ArrayList <String>>转换为字符串[]] []
思想警察蜂拥在这一块。 OP的要求已明确说明,我不明白为什么这个问题不能按照要求回答。 @fbafelip已经展示了如何去做。提到的代表团备选方案需要更多数量级的代码。 – EJP
有很多方法可以将元素添加到ArrayList(或任何List ):add(T),add(int,T),addAll(Collection ),addAll int,Collection )',通过构造函数,通过'Iterator '和'ListIterator '的'add'方法,并且通过以上述任何方式修改以'subList'返回的视图。你需要处理所有这些吗? –
trutheality
思想警察?真的,你会比较我的答案和极权主义国家吗?因为我使用的只是权威的一个论点......正确的疑难杂症。 –