具体参数化类型的数组固有地被破坏。请记住,数组是协变的,数组类型检查是运行时 *** 作。在运行时,所有泛型都已被擦除,因此Array
Store检查无法
<Pair<ParseNode, ParseNode>>从中分辨出来
<Pair<BigInteger,IOException>>。
泛型的基本约定是:“我,编译器,保证如果编写的代码不生成警告,则在运行时永远不会得到类强制转换异常。”
编译器也不能向您保证,如果
ArrayList<Pair<ParseNode,ParseNode>>在数组中放置了非的内容,它将能够给您带来编译时错误。如果添加错误的类型,运行时系统也无法保证会得到ArrayStoreException(如Language
Specification所述),而不是稍后将其取回时抛出ClassCastException。(第二部分实际上就是为什么它实际上是非法的,而不仅仅是警告,它会导致数组不遵守语言规范。)
因此,它不允许您以这种方式声明它们,并迫使您承认“不安全”警告。这样说:“我告诉过您,我不能保证使用此数组不会导致任何类强制转换异常,这取决于您确保只在此处放置正确的东西。”
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)