【发布时间】:2015-05-27 03:07:02
【问题描述】:
现在,我之前看到过很多与this 或this 类似的问题,我知道答案是“因为擦除”。但我不明白为什么擦除会阻止我们创建泛型数组。
据我所知;数组表示内存的连续分配,包含基元或对对象的引用。除非我弄错了,java 数组只不过是 C/C++ 数组,它们周围有一些花哨的装饰。这是正确的吗?
如果是这样,为什么擦除会阻止像这样为泛型类型创建数组?无论类的类型如何,不是所有引用的大小都相同吗?课程当然会更大或更小,但这不应该影响参考。那么我们不知道数组应该有多大吗?
或者说技术上可行,但是如果我们允许创建泛型数组会遇到其他问题?
明确一点:我了解擦除是什么以及它是如何工作的。 鉴于上述限制,我了解如何创建数组。我不想这样做。
我只是想了解创建数组时需要类型信息的原因。
【问题讨论】:
-
可以创建一个泛型数组,只有Java编译器不会知道它是一个泛型类型的数组。
-
为什么:因为“erasure”表示类型被擦除,所以在运行时不可用。
-
我明白“擦除”是什么意思。我在问为什么类型信息在这种情况下很重要?它提供了什么,我在创建数组时离不开它?
-
java 将组件类型与数组对象相关联。所以
String[]对象与String.class相关联。为什么?因为协方差。为什么?嗯...我喜欢@raxod502 的说法——“整件事是Java 设计中错误的喜剧”stackoverflow.com/a/2927415/2158288