为什么集合类型检查仅在编译时发生, 在编译时和运行时检查和数组类型。
答案 0 :(得分:0)
Java使用类型擦除,因为正如@khelwood泛型的评论所指出的那样是经过深思熟虑并在1.5中引入语言。
此外,运行时类型检查在计算上非常昂贵,因此在编译时处理检查以减少在运行时检查的需要。
另外,正如InjuredThePatient在评论中所指出的,你所看到的是"运行时类型检查" ArrayList
s实际上是内存分配错误。
答案 1 :(得分:0)
引用数组必须进行运行时检查,因为它们的奇怪行为允许静态不安全的隐式转换。您可以将String[]
分配给Object[]
并将Thread
存储到其中。如果在运行时未选中它(它会抛出ArrayStoreException
),那么类型安全性将被破坏,从而导致移动代码安全。
泛型的复杂性导致了各种模糊的编译器错误。这些是相对良性的,但如果遗嘱留给JVM强制执行,那么它们就是漏洞。事实证明,规范本身并不健全。
如果Object[]
是唯一的参考数组类型,那么Java本来是一种更好的语言。也会迫使main
变得更加明智。