你能用Java扩展ArrayList吗?
是否可以创建一个扩展ArrayList的子类? 如果是这样,怎么样?
您可以扩展Java中不是final的任何类。 话虽如此,如果没有真正的is-a关系,你应该避免inheritance。 考虑用于重用的组合。 了解Liskov替代原则
是的你可以。
public class MyArrayList extends ArrayList { }
但是,我不确定你为什么要这样做。
正如许多其他人所说,是的,你可以扩展类ArrayList
,但它不是你通常应该做的事情; 它不被认为是Java的好习惯。
我主要是一名Java程序员,但过去几个月我一直在研究C#代码。 如果你需要一个特定类型的集合,我觉得在C#中扩展标准集合类似乎是一个常见的习惯用法(我实际上不知道它是否是一般的常用成语 – 至少编写代码的人是我’我正在一直这样做。
因此,如果他们有一个Person
类并且他们需要一个人员列表,他们就会创建一个类PersonList
,它扩展了ArrayList
的C#等价物。
如果你需要一个Person
对象列表而不是为此创建一个特定的子类,那么Java中的常用习惯就是使用ArrayList
。
我建议你坚持使用常见的Java方式,而不是创建自己的ArrayList
子类或其他集合类。
ArrayList不是final类,它提供了公共构造函数,因此从技术上讲它可以扩展。
但最佳做法是委托而不是延长。 请参阅: 装饰图案
试一试吧。 这个类不是最终的,它的构造函数是公共的,所以你可以。 然而,初学者可能不是一个好主意。
大多数时候,任何人都不是个好主意。 想象一下,你添加了一些function,并获得ExtList1 extends ArrayList
。 你的大学增加了不同的独立function,所以你有ExtList2 extends ArrayList
。 现在你想要他们两个,你运气不好。
或者您需要具有不同基本列表实现的相同function(可能是LinkedList
,尽管使用它几乎总是错误的)。 再次,运气不好。
这些都是授权获胜的所有情况。 当某人已经创建了基础时,它不需要更加冗长。
我只会inheritanceArrayList
,如果有一个很好的理由做到这一点。 可能是基于适当的JMH基准测试的一些非常极端的性能要求。
正如其他人所说,扩展java lang数据结构是一个非常糟糕的主意。 但是,如果您想要在集合类中隔离某些逻辑,我建议使用以下解决方案:
public class ProductCollection{ ArrayList products; public Product getByCode(String code) { // ... your logic goes here. } }