是否有可能创建一个堆栈数组而不必在它们出来时抛出堆栈? 当我做这样的事情时,Eclipse给我一个关于无法创建Stack的泛型数组的警告:
Stack<Card>[] cards = new Stack<Card>[52];
答案 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)
为什么还要使用数组?
这是一种低级编程结构。
如果您不想使用初始化,请使用List
或Set
代替(例如org.apache.commons.collections.list.LazyList
)。
或者至少
Arrays.asList(new Stack[52])
将数组包装到列表中。
我无法重现jour错误.. :(因为一个不同的警告/错误级别设置,因为它是错误的。
答案 4 :(得分:0)
好吧,数组不需要是通用的,因为他总是被定义为这个。为什么你认为你必须演员?我认为日食在这里有些混乱。
答案 5 :(得分:0)
这与类型擦除有关。基本上,泛型类型仅在编译时存在,并且在运行时不存在
请查看this forum post以获得更好的解释。