【发布时间】:2014-11-19 15:34:38
【问题描述】:
集合不提供运行时安全,它们只提供编译时安全。 但我读到数组提供运行时和编译时安全性。
由于列表是建立在数组之上的,它们也可以提供运行时安全性。但是为什么不提供呢?
如果我们看一下 ArrayList 的源代码,数组声明如下: http://www.docjar.com/html/api/java/util/ArrayList.java.html
private transient Object[] elementData;
不能改成
private transient T[] elementData;
【问题讨论】:
-
两者在功能上没有区别。但是,如果您想要运行时安全,请查看 Java 的 checked collection
-
感谢您让我知道这一点。
-
当您将数组声明为
MyClass[]时,它在运行时被限制为仅包含 MyClass 对象。当您声明ArrayList<MyClass>时,它可以在运行时包含任何类型的对象。从这个意义上说,数组“更安全”。列表不提供运行时安全性的原因是其中的数组始终是Object[],无论您指定的泛型类如何。
标签: java arrays generics arraylist collections