2017-04-19 15 views
2
public class Stack { 
    private LinkedList<? extends Number> stack; 

    public <T extends Number> void push(T t){ 
     stack.add(t); 
    } 

    public <T extends Number>T pop(){ 
     return stack.removeLast(); 
    } 
} 

最後のメソッドを追加して削除すると、コンパイル時エラーが発生します。私がここで間違っていることを理解する助けてください?プッシュでタイプの不一致:キャプチャ#2から変換できませんか? Number to T

エラー -

方法は、追加(?キャプチャ#1の番号を拡張)タイプで LinkedListのが 引数(T)のために適用されない

エラーでポップ -

タイプの不一致:キャプチャ#2の変換できません? Number to T

+0

あなたの質問を編集し、エラーを記載してください。あなたはまた、あなたが達成しようとしていることを記述しなければなりません。 –

+1

'?'はいくつかの 'T'ではないので、クラス内のどこでも' Stack 'と' T'を使用してください。 –

+0

この場合ジェネリックスは必要ありません。上限の 'Number'でそれらを置き換えることができます。コードは(たとえコンパイルされたとしても)ある種の 'ClassCastException'につながる可能性が高いでしょう。あなたが 'Double 'をプッシュ(...)しようとしているのに、' Integer'を 'pop()'しようとすると... – Turing85

答えて

2

?Tと同じものではありません、あなたは(メソッドのみのために)あなたのクラスでTを定義していません。したがって、私は次のような一般的な全体Stackクラス作るお勧め:

public class Stack<T extends Number> { 
    private LinkedList<T> stack; 

を次に、あなたのpush()pop()方法でTを使用することができます。

2

あなたの全体のクラスを一般的にするのはなぜですか?そのような:

public class Stack <T extends Number>{ 
    private LinkedList<T> stack; 

    public void push(T t){ 
     stack.add(t); 
    } 

    public T pop(){ 
     return stack.removeLast(); 
    } 

} 
関連する問題