【发布时间】:2020-02-22 15:57:30
【问题描述】:
众所周知,Java 不支持创建泛型数组。例如,下面的代码在构建过程中会报错generic array creation,
Deque<TreeNode>[] stacks = {new ArrayDeque(), new ArrayDeque()};
但是,下面创建这样一个数组的代码是有效的,
Deque<TreeNode>[] stacks = new ArrayDeque[2];
我想知道为什么这两种逻辑之间的行为不同的原因。
【问题讨论】:
-
如果您不忽略
ArrayDeque的泛型类型,您的第二个示例也会失败。 Java 在第一个示例中没有忽略它,并将其添加到数组初始化器中。 -
@Tom 在高层次上,您的解释对您来说很有意义。但是你能给我一个例子,说明如何通过更新第二个代码“不忽略 ArrayDeque 的泛型”吗?另一个问题是,第二个代码在 Java 中是否被认为是一种不好的做法?
-
您似乎已经知道泛型类型,因为您将它们用于
Deque<TreeNode>,因此更新您的代码以在秒示例中不忽略应该是相当明显的new ArrayDeque<TreeNode>[2]。 -
@CodingFanSteve 不确定您是否意识到,但第二个示例将有 2 个
null条目。 -
@jbx 是的,当我做第二个 Code Pattern 时,我通常使用 Arrays.setAll() 来初始化数组。