2012-12-27 88 views
0

我開始學習Java泛型。我對泛型語法及其含義有一些誤解。我懇求理解我的問題看起來是否微不足道。瞭解Java中泛型的語法

  1. 你可以寫:

    public class MyClass<SomeClass> {} 
    
  2. ,你可以寫:

    public class MyClass<C extends SomeClass> {} 
    
  3. ,你也可以這樣寫:

    public class MyClass<? extends SomeClass> {} 
    

這幾種情況之間的區別是什麼

  1. 第一種情況是絕對清楚的對我說:你可以使用SomeClass的實例和他的子類作爲類的參數的MyClass 實例。
  2. 我認爲,在這種情況下,你只能使用MyClass的的子類
  3. 同樣的例如:只使用MyClass的的子類實例作爲類的參數MyClass的。

我的猜測是否正確?特別是第二和第三種情況的區別是什麼?

在此先感謝您的解釋!

+0

「3.你也可以這樣寫:公共MyClass類<?延伸SomeClass的> {}」 不,你不能 – newacct

回答

1

那麼不同的是,你不能在泛型類聲明

public class MyClass<? extends SomeClass> {} // this isn't valid 

上述聲明導致編譯器錯誤使用?

From Documentation:

泛型類與以下格式定義:

類名{/ * ... * /} type參數部, 由尖括號分隔(<>) ,跟在課程名稱後面。它指定了 類型參數(也稱爲類型變量)T1,T2,...和Tn。

public class MyClass<C extends SomeClass> {} 

在此聲明C類型參數這可能是類型SomeClass的或任何其子類的的。

例子:

Class SomeOtherClass extends SomeClass { 
} 

MyClass clazz = new MyClass<SomeOtherClass>(); 
MyClass clazz = new MyClass<SomeClass>();