gpt4 book ai didi

java - 为什么通用数组创建在某些情况下有效

转载 作者:行者123 更新时间:2023-12-01 19:33:45 25 4
gpt4 key购买 nike

众所周知,Java 不支持泛型数组创建。例如,以下代码将在构建期间因通用数组创建而出错,

Deque<TreeNode>[] stacks = {new ArrayDeque(), new ArrayDeque()};

但是,创建此类数组的以下代码是有效的,

Deque<TreeNode>[] stacks = new ArrayDeque[2];

我想知道这两种逻辑之间的行为不同背后的基本原理。

最佳答案

当他们说“parameterised array creation is not allowed ”时,他们的意思是不允许这种特定的语法:

new T<U>[]

哪里TU是类型。请注意,这与数组的声明类型无关。 声明一个数组为 Deque<TreeNode> 类型是完全可以的。 ,所以问题出在 = 的右侧,不是左边。

在第二种情况下,你正在做 new ArrayDeque[2] ,显然没有违反规则,因为它的形式不是 new T<U>[] .

在第一种情况下,您使用数组初始值设定项,使编译器推断您尝试创建的数组类型,编译器通过查看左侧来完成此操作。所以第一行相当于:

Deque<TreeNode>[] stacks = new Deque<TreeNode>[] {new ArrayDeque(), new ArrayDeque()};

这是不允许的。其形式为 new T<U>[] .

关于java - 为什么通用数组创建在某些情况下有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58573067/

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