是否可以創建一個擴展ArrayList的子類?如果是這樣,怎麼樣?你可以在Java中擴展ArrayList嗎?
回答
你可以擴展任何類,是不是在Java中最後。話雖如此,如果沒有真是is-a的關係,你應該避免繼承。考慮構成重用。閱讀關於Liskov substitution principle
爲什麼不呢?
import java.util.ArrayList;
public class Foo<T> extends ArrayList<T> {
// ...
}
試試吧。這個類不是最終的,它的構造函數是公共的,所以你可以。但是,初學者可能不是個好主意。
大多數時候,對任何人來說都不是好主意。想象一下,你添加一些功能,並得到ExtList1 extends ArrayList
。你們大學增加了不同的獨立功能,所以你有ExtList2 extends ArrayList
。現在你想要他們,而且你運氣不好。
或者您需要使用不同基本列表實現的相同功能(可能是LinkedList
,儘管使用它實際上總是錯誤的)。再次,運氣不好。
這些都是代表團獲勝時的情況。當someone has created the base already時,它不需要更詳細。
我只從ArrayList
繼承,如果有一個很好的理由正是該做的事情。也許一些真正極端性能要求基於正確的JMH基準。
是的,你可以。
public class MyArrayList<E> extends ArrayList<E>
{
}
但是,我不知道爲什麼你會想這樣做。
重命名它比ArrayList更令人敬畏的方式,當然。 - > List l = new MySuperAwesomeSandwichMakingConstantTimeLookupSwissArmyList(); – b3bop
hahahahhhahabhahahahaha幽默回覆...暴徒生活b3op –
把一個斷點,例如 –
是的,ArrayList不是final
。使用這種方法。
class Foo<T> extends ArrayList<T>
import java.util.ArrayList;
public class MyArrayList<T> extends ArrayList<T> {
//Add extra or override methods here...
}
的ArrayList是不是最終的類,它提供了公共的構造,所以在技術上可以延長。
但最佳做法是代表而不是延長。 請參閱:Decorator pattern
嗯......在所有情況下,**都不是使用委託代替繼承**的最佳實踐。你應該根據具體情況做出決定。 –
正如許多其他人所說,是的,你可以擴展類ArrayList
,但它不是你通常應該做的;在Java中它不被認爲是好的做法。
我主要是一個Java程序員,但過去幾個月我也一直在研究C#代碼。如果你需要一個特定類型的集合,它似乎是C#中擴展標準集合類的一個常見習慣用法(我實際上不知道它是否是一般的普通習慣用法 - 至少編寫代碼的人是'我一直在做這件事)。
所以,如果他們有一個類Person
,他們需要的人的名單,他們會創建一個類PersonList
,它擴展了C#相當於ArrayList<Person>
。
如果您需要一個Person
對象的列表,而不是爲此創建特定的子類,Java中常見的習慣用法就是使用ArrayList<Person>
。
我建議你堅持使用常見的Java方法,而不是創建自己的ArrayList
或其他集合類的子類。
嘿。既然你建議不要重寫這個類,那麼當一個項目被添加到一個列表中時,我將如何獲得回調? – Sipty
@Sipty對於這樣的事情,你真的想添加新的功能,而不是隻使用特定的類型參數(如我在上面的描述中),在我看來,創建一個子類是合法的。 – Jesper
@Sipty覆蓋是一個選項,但想象你的大學增加了一個不同的獨立功能,所以你有'ExtList1擴展ArrayList'和'ExtList2擴展ArrayList'。現在你想要他們,而且你運氣不好。或者你需要與不同的基礎列表實現相同的功能(也許'LinkedList',儘管使用它實際上總是錯誤的)。這些都是代表團獲勝的情況。當[某人已經創建了該基礎]時,它不必更冗長(https://google.github.io/guava/releases/23.0/api/docs/com/google/common/collect/ForwardingList.html)。 – maaartinus
- 1. 你可以擴展一個枚舉嗎?
- 2. 我可以在擴展Thread的類中使用ArrayList嗎?
- 3. 你可以把可擴展列表可擴展列表中
- 4. 你可以在Chrome擴展中使用jQuery POST嗎?
- 5. 你可以在jQuery中擴展val()函數嗎?
- 6. 你可以在一個類中擴展兩個類嗎?
- 7. 你可以在擴展測試中使用斷點嗎?
- 8. 你可以在TypeScript中擴展一個HTMLDivElement嗎?
- 9. 我可以在UIViewController中擴展viewWillAppear嗎?
- 10. 可以在Typescript中擴展類型嗎?
- 11. 在Javascript中,您可以擴展DOM嗎?
- 12. 我可以在SMLNJ中擴展typedef嗎?
- 13. 你可以修改Safari擴展中的http請求標頭嗎?
- 14. 你可以在類型數組上寫擴展方法嗎?
- 15. Servlets可以擴展嗎?
- 16. RestEasy可以擴展@Path嗎?
- 17. 在Java中,匿名類可以擴展另一個類嗎?
- 18. 你能擴展self.included嗎?
- 19. 你可以擴展初始化模型嗎?
- 20. 你可以擴展一個果園模塊嗎?
- 21. 你可以使用shell參數擴展匹配數字嗎?
- 22. 你可以使用HipHop PHP構建一個php擴展嗎?
- 23. Java - 你可以將一個對象轉換成它沒有擴展的類嗎?
- 24. 用Java中的抽象類擴展ArrayList?
- 25. 我可以切換擴展器的可擴展性嗎?
- 26. Java 7可以使用Apple Java擴展嗎?
- 27. 你可以添加你稱之爲靜態方法的擴展方法嗎?
- 28. 我可以像在C#中一樣在Java中創建擴展嗎?
- 29. 當擴展B安裝時,chrome.management.onInstalled.addListener警報擴展A可以嗎?
- 30. firefox擴展可以啓用/禁用其他擴展工作嗎?
@Rakesh Juyal是的,我做了嘗試,我遇到了一些問題。所以我只是確定。 – nambvarun
發佈你遇到的問題? –