Java-是新堆栈吗<&燃气轮机;[N] 等效于通用数据类型堆栈的新堆栈[N]<;项目>;?

Java-是新堆栈吗<&燃气轮机;[N] 等效于通用数据类型堆栈的新堆栈[N]<;项目>;?,java,arrays,generics,unbounded-wildcard,Java,Arrays,Generics,Unbounded Wildcard,对于泛型数据类型堆栈,新堆栈[N]是否等同于新堆栈[N] 编辑:虽然我知道最好避免混合泛型类型和数组,并且存在更健壮的解决方案,但我的疑问仍然存在:Kevin Wayne和Robert Sedgewick(第158页)编写的第四版《算法》等广为认可的教科书建议使用以下结构: Stack<String>[] a = (Stack<String>[]) new Stack[N]; Stack[]a=(Stack[])新堆栈[N]; [将我的评论变成真实的答案] 1) 应避免

对于泛型数据类型
堆栈
,新堆栈[N]
是否等同于
新堆栈[N]

编辑:虽然我知道最好避免混合泛型类型和数组,并且存在更健壮的解决方案,但我的疑问仍然存在:Kevin Wayne和Robert Sedgewick(第158页)编写的第四版《算法》等广为认可的教科书建议使用以下结构:

Stack<String>[] a = (Stack<String>[]) new Stack[N];
Stack[]a=(Stack[])新堆栈[N];

[将我的评论变成真实的答案]

1) 应避免混合数组和泛型类型

2) 相反,当需要处理多个“通用”对象时,可以使用Java集合类型,例如ArrayList,如

ArrayList<Stack<String>> theStacks = new ArrayList<>();
ArrayList theStacks=new ArrayList();

是的,除了返回类型(一个是
Stack[]
,另一个是
Stack[]
)之外,它们是等效的

请注意,
Stack[]
可以分配给
Stack[]
,而无需显式转换(您只会得到未经检查的转换警告),而将
Stack[]
分配给
Stack[]
而无需转换是错误的


新堆栈[N]
使用新代码中不建议使用的原始类型。

快速非答案:不要这样做。泛型和数组不应一起使用。请看@EddyG,我希望用以下代码创建一个字符串堆栈:stack[]a=(stack[])new stack[N];它会产生一个警告,但这总是被认为是不好的做法吗;您需要知道的是Oracle的文档。不要使用数组,只需选择集合类型,如ArrayList。然后直接创建一个“ArrayList”好的,我会研究的,谢谢!不,它们不是等价的。第一个不是合法的Java,不会编译。第二个是并将是。@EJP:它绝对是有效的Java。@EJP,你是。我建议你删除你的评论。