gpt4 book ai didi

java - 参数化类型数组

转载 作者:行者123 更新时间:2023-12-02 15:45:41 24 4
gpt4 key购买 nike

我无法确定以下 RHS 需要什么类型参数

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

为什么需要 <Pair<ParseNode,ParseNode>> 的副本不合法吗?

最佳答案

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

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

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

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

关于java - 参数化类型数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9542076/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com