2012-03-25 74 views
1
Stack<E>[] stacks = {new Stack<Bed>(), new Stack<Bookshelves>(), 
        new Stack<Chair>(), new Stack<Desk>(), new Stack<Table>()}; 

对于类,我必须创建自己的Stack类,它接受我指定的任何对象。根据规范,我必须将所有堆栈放入数组中。创建一个通用堆栈阵列

但是,当我尝试创建一个堆栈数组时,出现“无法找到符号:E类”错误。

我能做些什么来创建一个通用堆栈数组?

+2

您无法创建泛型数组。但如果可以的话,你想怎么做呢? – 2012-03-25 22:15:26

+2

你几乎可以更好地创建'Stacks'的List。 (虽然对于你的具体情况,我坦率地认为你根本不应该创建一个数组或列表,但应该将不同类型的列表作为显式的单独变量。) – 2012-03-25 22:32:34

回答

6

泛型类型声明,如<ê>只有当你定义一个类,像

public class Stack<E>{ 
// etc. 
} 

要创建堆栈的数组像你正在做的工作,你既可以使用通配符通用:

Stack<?>[] stacks = {new Stack<Bed>(), new Stack<Bookshelves>(), new Stack<Chair>(), new Stack<Desk>(), new Stack<Table>()}; 

或者如果栈里面所有的物体都有一个共同的遗产,你可以缩小东西通配符像

Stack<? extends Furniture>[] stacks = {new Stack<Bed>(), new Stack<Bookshelves>(), new Stack<Chair>(), new Stack<Desk>(), new Stack<Table>()}; 
+1

'堆栈 []'工作,但'堆栈<? extends Furniture> []'并不是因为你不能创建泛型数组,至少不是用那么好的简短语法:/ – 2012-03-25 22:22:38

+0

非常感谢! – prunes4u 2012-03-25 23:55:57