你能用Java扩展ArrayList吗?

nam*_*run 27 java arraylist extend

是否可以创建一个扩展ArrayList的子类?如果是这样,怎么样?

hel*_*922 22

是的你可以.

public class MyArrayList<E> extends ArrayList<E>
{
}
Run Code Online (Sandbox Code Playgroud)

但是,我不确定你为什么要这样做.

  • 当然,将它重命名为比ArrayList更令人敬畏的东西. - > List l = new MySuperAwesomeSandwichMakingConstantTimeLookupSwissArmyList(); (47认同)
  • 很抱歉成为超级傻瓜,但是E是什么意思? (2认同)
  • @IchHabsDrauf 创建 ArrayList 时,需要指定列表将包含的类型。例如“new ArrayList&lt;String&gt;()”。因此 E 是类型的占位符(在这种情况下它是字符串)。这称为“通用类型”。如果你创建一个 MyArrayList 的实例,你会这样做:new MyArrayList&lt;String&gt;()。这会将类型“String”传递给 ArrayList 的泛型类型,从而创建 ArrayList&lt;String&gt; 的父级。 (2认同)

Ara*_*ram 19

您可以扩展Java中不是final的任何类.话虽如此,如果没有真正的is-a关系,你应该避免继承.考虑用于重用的组合.了解Liskov替代原则


Jes*_*per 10

正如许多其他人所说,是的,你可以扩展课程ArrayList,但这不是你通常应该做的事情; 它不被认为是Java的好习惯.

我主要是一名Java程序员,但过去几个月我一直在研究C#代码.如果你需要一个特定类型的集合,我觉得扩展标准集合类似乎是C#中常见的习惯用法(我实际上不知道它是否是一般的常用成语 - 至少编写代码的人是我'我一直在这样做.

因此,如果他们有一个类Person并且他们需要一个人列表,他们就会创建一个PersonList扩展C#等价的类ArrayList<Person>.

ArrayList<Person>如果您需要一个Person对象列表而不是为此创建特定的子类,那么Java中的常用习惯就是使用它.

我建议你坚持使用常见的Java做事方式,而不是创建自己的子类ArrayList或其他集合类.

  • @Sipty对于类似的东西,你真的想要添加新功能,而不是仅仅使用特定类型参数(如上面的描述),在我看来,创建一个子类是合法的. (2认同)