为什么在某些情况下创建通用数组

问题描述 投票:0回答:1

众所周知,Java不支持通用数组创建。例如,以下代码在构建过程中将以generic array creation出现错误,

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

但是,以下创建这样的数组的代码有效,

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

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

java generics deque
1个回答
3
投票
new T<U>[]

其中TU是类型。请注意,这与数组的

declared type没有关系。 

declare类型为Deque<TreeNode>的数组是完全可以的,因此问题出在=的右侧,而不是左侧。

在第二种情况下,您正在执行new ArrayDeque[2],显然没有违反规则,因为它不是new T<U>[]形式。在第一种情况下,您使用的是

array initialiser

,使编译器推断出您要创建的数组类型,而编译器则通过查看左侧来进行此操作。因此,第一行等效于:

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

这是不允许的。它的格式为new T<U>[]
© www.soinside.com 2019 - 2024. All rights reserved.