堆栈数组

时间:2009-05-08 06:07:12

标签: java eclipse arrays generics

是否有可能创建一个堆栈数组而不必在它们出来时抛出堆栈? 当我做这样的事情时,Eclipse给我一个关于无法创建Stack的泛型数组的警告:

Stack<Card>[] cards = new Stack<Card>[52];

6 个答案:

答案 0 :(得分:9)

Joshua Bloch在 Effective Java,Second Edition 中非常出色地描述了这个问题。 Check out the relevant section on Google Book Search

他提供的建议是更喜欢列表到数组。您的代码可能如下所示:

List<Stack<Card>> cards = new ArrayList<Stack<Card>>();

答案 1 :(得分:2)

您可以执行以下操作,但这会为您提供编译器“未选中”警告。

Stack<Card>[] cards = (Stack<Card>[]) new Stack[52];

答案 2 :(得分:2)

Stack<Card>[] decks = new Stack[9];       // Declare
Card c = decks[5].pop();                  // This compiles - java 'knows' the type
Integer i = decks[4].pop();               // This will not compile

答案 3 :(得分:1)

为什么还要使用数组?

这是一种低级编程结构。

如果您不想使用初始化,请使用ListSet代替(例如org.apache.commons.collections.list.LazyList)。

或者至少

Arrays.asList(new Stack[52])将数组包装到列表中。

我无法重现jour错误.. :(因为一个不同的警告/错误级别设置,因为它是错误的。

答案 4 :(得分:0)

好吧,数组不需要是通用的,因为他总是被定义为这个。为什么你认为你必须演员?我认为日食在这里有些混乱。

答案 5 :(得分:0)

这与类型擦除有关。基本上,泛型类型仅在编译时存在,并且在运行时不存在

请查看this forum post以获得更好的解释。