2017-04-19 76 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擴展爲T

錯誤在推 -

的方法,附加(?捕獲#1-延伸數)在 類型鏈表是不適用於 參數(T)

錯誤在流行 -

類型不匹配:無法從捕獲#2轉換?將Number擴展爲T

+0

請[編輯]你的問題,幷包括錯誤。你也應該描述你試圖達到什麼目標,這個問題是無關緊要的。 –

+1

'?'不是'T',只是在類中的任何地方使用'Stack '和'T' – 2017-04-19 17:48:14

+0

在這種情況下,您不需要泛型。你可以用'Number'的上限替換它們。該代碼很可能(即使它會編譯)導致一些'ClassCastException's。想象一下你'推(...)'一個'雙',但嘗試'彈出()一個'整數'... – 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(); 
    } 

} 
相關問題