首页 > 解决方案 > 是什么让 Arraylist 成为泛型类型而数组不在 Java 中?

问题描述

在将它们归类为泛型时,对 Arraylists 和 Arrays 之间的区别感到非常困惑。在我的课程中,我们并没有真正谈论泛型编程,当他们解释差异时,主要是关于一个人如何成长而另一个人不能成长。当我们说一个类是通用的时,这似乎并不是我认为真正的区别。谷歌搜索让我更加困惑。

我看到的是“泛型类型是在类型上参数化的泛型类或接口。” 但是Java的数组不允许参数化类型吗?但只是写成不同的形式?例如,数组类型String[]类似于Arraylist<String>我的arraylists 类型。非常感谢对此的简单(高级)解释。

标签: javagenerics

解决方案


是什么让ArrayList泛型类型和数组不在 Java 中?

ArrayList是一个类,并且有一个看起来像这样的声明(你可以在这里找到它):

public class ArrayList<E> // ...

注意“ <E>”。这声明了一个名为 的类型参数E,这就是ArrayList泛型的原因。您还可以在 的API 参考中找到它ArrayList

另一方面,数组不是类或接口。它们不是通用的,因为只有类和接口可以是通用的。

JLS §4.3

有四种引用类型:类类型(§8.1)、接口类型(§9.1)、类型变量(§4.4)和数组类型(§10.1)。

JLS §8.1.2

如果一个类声明了一个或多个类型变量(第 4.4 节),则它是泛型的。

JLS §9.1.2

如果接口声明了一个或多个类型变量(第 4.4 节),则该接口是泛型的。

历史旁注:泛型添加到 Java 比数组晚得多,数组从一开始就在 Java 中,所以也有。


推荐阅读