Stack<?>[] stacks = {
new Stack<Bed>(),
new Stack<Bookshelves>(),
new Stack<Chair>(),
new Stack<Desk>(),
new Stack<Table>()
};
这是制作堆栈数组的代码。我把它们放在一个数组中的原因是因为它是Assignment的要求之一。该程序在没有数组的情况下工作。
此外,Stack接受泛型,因为我必须创建自己的Stack(也是Assignment的要求)。
while(sc.hasNext()){
temp = sc.nextLine().split(" ");
if(temp[0].equals("Bed")){
//beds.push(new Bed(temp[1], temp[2]));
stacks[0].push(new Bed(temp[1], temp[2]));
}else if(temp[0].equals("Table")){
//tables.push(new Table(Integer.parseInt(temp[1]), Integer.parseInt(temp[2]), Integer.parseInt(temp[3]), temp[4]));
stacks[4].push(new Table(Integer.parseInt(temp[1]), Integer.parseInt(temp[2]), Integer.parseInt(temp[3]), temp[4]));
}else if(temp[0].equals("Desk")){
//desks.push(new Desk(temp[1],temp[2], Integer.parseInt(temp[3]), Integer.parseInt(temp[4])));
stacks[3].push(new Desk(temp[1],temp[2], Integer.parseInt(temp[3]), Integer.parseInt(temp[4])));
}else if(temp[0].equals("Chair")){
//chairs.push(new Chair(temp[1], temp[2]));
stacks[2].push(new Chair(temp[1], temp[2]));
}else if(temp[0].equals("Bookshelves")){
//bookshelves.push(new Bookshelves(Integer.parseInt(temp[1]), Integer.parseInt(temp[2]), Integer.parseInt(temp[3]), Integer.parseInt(temp[4]), temp[5]));
stacks[1].push(new Bookshelves(Integer.parseInt(temp[1]), Integer.parseInt(temp[2]), Integer.parseInt(temp[3]), Integer.parseInt(temp[4]), temp[5]));
}else{
color = temp[0];
}
}
此代码从文本文件中获取信息并将对象推入堆栈。
我收到错误说:
push(capture#627 of ?) in Stack<capture#627 of ?> cannot be applied to (Bed)
对于我创建的所有类,都会重复此错误。
注释掉的部分是我为每个Object创建一个堆栈之前的代码。
在将所有内容都推入堆栈后,我无法将所有内容都放入数组中,因为将为不必要的中间变量取出点数。
答案 0 :(得分:2)
正确且类型安全地执行此操作的唯一方法是
a)将这一切合并为一个Stack<Furniture>
(假设所有类都扩展为Furniture
)
b)为每个堆栈保留单独的变量,并完全摆脱数组。
答案 1 :(得分:1)
试试这个?
((Stack<Bed>)stacks[0]).push(new Bed(temp[1], temp[2]));