java - 是什么让 Arraylist 成为泛型类型而数组不在 Java 中?
问题描述
在将它们归类为泛型时,对 Arraylists 和 Arrays 之间的区别感到非常困惑。在我的课程中,我们并没有真正谈论泛型编程,当他们解释差异时,主要是关于一个人如何成长而另一个人不能成长。当我们说一个类是通用的时,这似乎并不是我认为真正的区别。谷歌搜索让我更加困惑。
我看到的是“泛型类型是在类型上参数化的泛型类或接口。” 但是Java的数组不允许参数化类型吗?但只是写成不同的形式?例如,数组类型String[]
类似于Arraylist<String>
我的arraylists 类型。非常感谢对此的简单(高级)解释。
解决方案
是什么让
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 中,所以也有。
推荐阅读
- python-3.x - Django外键未加载对象
- giza++ - 在 giza++ 上出现以下错误的原因是什么?
- sql - 从Oracle SQL中的每个组中选择具有最大值的行
- laravel - laravel 在 $user->posts()->create([...]) 期间使用 mutator 访问相关模型
- r - R'All'函数在for循环中不起作用
- java - 如何将 LuaClosure 转换为 Java 方法?
- android-studio - Android Studio Emulator 自动终止。AVD Pixel_4_API_30 的模拟器进程被杀死
- css - 应该怎么做才能使 svg 掩码起作用?
- python - 如何计算两个字符串列表的 Cohen Kappa 分数?
- nginx - 将 varnish 配置为使用 SSL 终止在 HTTPS 上提供服务