我想保留我的子類通用,並且我想要更改的是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
思想警察?真的,你會比較我的答案和極權主義國家嗎?因爲我使用的只是權威的一個論點......正確的疑難雜症。 –