参数化类型数组

2024-01-29

我无法确定以下 RHS 中期望的类型参数

ArrayList<Pair<ParseNode,ParseNode>>[] nodes = new ArrayList[indexes.length];

为什么要复制一份<Pair<ParseNode,ParseNode>>不合法吗?


具体参数化类型的数组本质上是被破坏的。请记住,数组是协变的,并且数组类型检查是运行时操作。在运行时,所有泛型都已被类型擦除,因此数组存储检查无法判断<Pair<ParseNode, ParseNode>> from <Pair<BigInteger,IOException>>.

泛型的基本契约是“我,编译器,承诺如果您编写不生成警告的代码,您将永远不会在运行时遇到类转换异常”。

编译器也不能向您保证,如果某些内容不是ArrayList<Pair<ParseNode,ParseNode>>被放入该数组中。如果您添加了错误的类型,运行时系统也不能保证您会得到 ArrayStoreException(就像语言规范所说的那样),而不是稍后当您将其撤回时得到 ClassCastException。 (第二部分实际上是为什么它实际上是非法的,而不仅仅是警告,它会导致一个不遵守语言规范的数组。)

因此,它不允许您以这种方式声明它们,并强迫您承认“不安全”警告。这样它就表示“我告诉过你,我不能保证使用这个数组不会出现任何类转换异常,你有责任确保只把正确的东西放在这里。”

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

参数化类型数组 的相关文章

随机推荐