我欣喜若狂地说,几周前我刚刚在一个项目中实现了一个通用链表,而且它可以工作了!不过有一个问题。我被迫做演员(没想到)。
以下是一些片段,我希望足以定义问题,从通用堆栈开始:
public class GenericStack<E> {
public LinkedList <E> stack = new LinkedList<>();
public void push (E obj){
stack.add(obj);
}
public E pop() {
if (stack.isEmpty()) return null;
return stack.removeLast();
}
...
}
这是我使用通用堆栈的类定义:
public class Grid extends GenericStack<JTextField> implements ActionListener, KeyListener, KeyCodes
这是我的定义stack
以及我正在推动和弹出的内容:
GenericStack stack = new GenericStack();
public static JTextField[][] cells = new JTextField[11][11];
这是我推进stack
:
stack.push(Grid.cells[currentCell.row][currentCell.col]);
这是我弹出的地方stack,
,只有在我显示的 CAST 时才有效:
private void calculate(){
JTextField w = new JTextField();
while(stack.size()>0){
w = (JTextField) stack.pop();
System.out.println("stack element " + w.getText());
}
}
现在我没有抱怨;我什至不确定是否存在要处理的问题,但是如果没有演员表(JTextField)
,我会得到“不兼容的类型--需要:JTextField; 找到:对象”,但stack.pop()
明确定义为返回泛型类型,即JTextField
,那我为什么要需要投吗?