数週間前にプロジェクトで一般的なリンクされたリストを実装したばかりで、IT WORKS ! ただし、1 つの問題があります。私はキャストを余儀なくされています(そして期待していませんでした)。
ここにいくつかのスニペットがあります。一般的なスタックから始めて、問題を定義するのに十分であることを願っています:
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,
表示されているキャストを行う場合にのみ、どの作品からポップするかを示します。
private void calculate(){
JTextField w = new JTextField();
while(stack.size()>0){
w = (JTextField) stack.pop();
System.out.println("stack element " + w.getText());
}
}
今、私は文句を言っていません。対処する問題があるかどうかさえわかりませ(JTextField)
んが、キャストがないと、「INCOMPATIBLE TYPES--REQUIRED: JTextField; FOUND: Object」が表示stack.pop()
されますが、ジェネリック型を返すように明確に定義されてJTextField
います。キャストする必要がありますか?