2014-02-11 156 views
0
class a{} 
class b extends a{} 
class c <? extends b> extends b{} 
public class d { 
     public static void main(String[] args) { 
     c<c> n = new c<c>(); 
     } 
} 

我正在閱讀SCJP。我沒有得到泛型類的概念class<?>class<? extends anything> .....如果這意味着我們可以傳遞任何擴展「任何東西」的類,那麼爲什麼上面的代碼不工作?用泛型類聲明java

請解釋這一點,它非常混亂

問候

回答

2

這是沒有意義的聲明與一類參數類而沒有提及該參數。因此,宣佈這樣的班級是不可預見的。你必須給類型參數一個名字。

變化

class c <? extends b> extends b{} 

class c <T extends b> extends b{} 

在類c你現在可以參考類型參數T,例如聲明方法和變量。

2

您沒有給出確切的錯誤消息,但我想這是關於您在定義類型參數時不能使用通配符的問題。

嘗試:

class c <T extends b> extends b{} 

注:這是一個開始一個大寫字母類名稱的慣例,所以使用:

class C <T extends B> extends B{}