是否new Stack<?>[N]等同于new Stack[N]通用数据类型Stack<Item>?
编辑:虽然我知道最好避免混合泛型类型和数组并且存在更强大的解决方案,但我的疑问仍然存在: Kevin Wayne 和 Robert Sedgewick 的第4 版算法(第 158 页)等广受认可的教科书建议使用构造如下所示:
Stack<String>[] a = (Stack<String>[]) new Stack[N];
是否new Stack<?>[N]等同于new Stack[N]通用数据类型Stack<Item>?
编辑:虽然我知道最好避免混合泛型类型和数组并且存在更强大的解决方案,但我的疑问仍然存在: Kevin Wayne 和 Robert Sedgewick 的第4 版算法(第 158 页)等广受认可的教科书建议使用构造如下所示:
Stack<String>[] a = (Stack<String>[]) new Stack[N];
[将我的评论变成真正的答案]
1) 应避免混合数组和泛型类型。
2) 相反,当需要处理多个“通用”对象时,可以使用 Java 集合类型,例如 ArrayList,例如
ArrayList<Stack<String>> theStacks = new ArrayList<>();
是的,它们是等价的,除了返回类型(一个是Stack[],另一个是Stack<?>[])。
请注意,Stack[]可以在Stack<String>[]没有显式转换的情况下分配给(您只会收到未经检查的转换警告),而在没有转换的情况下分配给是错误Stack<?>[]的Stack<String>[]。
new Stack[N]使用新代码中不推荐的原始类型。