是否可以创建一个扩展ArrayList的子类?如果是这样,怎么样?
答案 0 :(得分:20)
是的,你可以。
public class MyArrayList<E> extends ArrayList<E>
{
}
但是,我不确定你为什么要这样做。
答案 1 :(得分:16)
您可以在Java中扩展任何非 final 的类。话虽如此,如果没有 true is-a 关系,你应该避免继承。考虑用于重用的组合。阅读Liskov substitution principle
答案 2 :(得分:9)
正如许多其他人所说,是的,你可以扩展课程ArrayList
,但这不是你通常应该做的事情;它不被认为是Java的好习惯。
我主要是一名Java程序员,但过去几个月我一直在研究C#代码。如果你需要一个特定类型的集合,我觉得扩展标准集合类似乎是C#中常见的习惯用法(我实际上不知道它是否是一般的常用成语 - 至少编写代码的人是我'我一直在这样做。)
因此,如果他们有一个类Person
并且他们需要一个人员列表,他们就会创建一个类PersonList
,它扩展了与ArrayList<Person>
相当的C#。
如果您需要ArrayList<Person>
个对象的列表而不是为此创建特定的子类,Java中的常用习惯就是使用Person
。
我建议你坚持使用常见的Java方式,而不是创建自己的ArrayList
子类或其他集合类。
答案 3 :(得分:2)
ArrayList不是最终类,它提供了公共构造函数,因此从技术上讲它可以扩展。
但最佳做法是委托而不是延伸。 请参阅:Decorator pattern
答案 4 :(得分:0)
试一试。这个类不是最终的,它的构造函数是公共的,所以你可以。但是,初学者可能不是一个好主意。
大多数时候,任何人都不是个好主意。想象一下,您添加了一些功能并获得ExtList1 extends ArrayList
。您的大学添加了不同的独立功能,因此您拥有ExtList2 extends ArrayList
。现在你想要他们两个,你运气不好。
或者您需要具有不同基本列表实现的相同功能(可能是LinkedList
,尽管使用它几乎总是错误的)。再次,运气不好。
这些都是授权获胜的情况。在someone has created the base already时,它不需要更详细。
我只会继承ArrayList
,如果有充分理由做到这一点。根据适当的JMH基准,可能还有一些非常极端的性能要求。
答案 5 :(得分:0)
正如其他人所说,扩展java lang数据结构是一个非常糟糕的主意。 但是,如果您想要在集合类中隔离某些逻辑,我建议使用以下解决方案:
public class ProductCollection{
ArrayList<Product> products;
public Product getByCode(String code) {
// ... your logic goes here.
}
}