你能用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. } }