2011-03-23 100 views
1

我有這個類條目...Java泛型的問題

public class Entry <K, V> { 
    private final K mKey; 
    private final V mValue; 

    public Entry() { 
     mKey = null; 
     mValue = null; 
    } 
} 

,如果我用一個int作爲MKEY會發生什麼?據我所知int不能爲null!

回答

6

Integer類型的變量可以爲null。 int不能爲空。後者是原始類型,前者是用於處理基元作爲對象的包裝器引用類型。如果您使用的是:

Entry<Integer, String> myEntry; 

然後,您必須使用包裝類型。基元不能用作Java中的類型參數,因此您不能使用Entry<int, String>(它不會編譯)。

+0

@Halluc:嗯,那麼好吧,看看我的答案的最後。 – 2011-03-23 18:13:23

+0

然後,我可以使用整數,就像它是一個整數?我真的從來沒有使用「整數」,除了調用它的方法(parseInt等...) – bluehallu 2011-03-23 18:20:52

+1

@Halluc:由於[autoboxing]的奇蹟(http://download.oracle.com/javase/1.5.0/docs/ guide/language/autoboxing.html),通常你可以毫不費力地在'int'和'Integer'之間進行切換。但是,有一點你必須小心,就是將一個Integer分配給一個int。該值可以爲null,如果是,則會得到NullPointerException。 – 2011-03-23 18:29:13

1

您不能將基元用作類型參數。

0

泛型類型參數需要是對象,它們不能是基元。因此,你可以圍繞mKey/mValue使用Integer包裝類,並將其設置爲null,但試圖使用int原語總會給你一個編譯錯誤。