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