2012-11-26 23 views
2

我遇到了兩個變量:int和Integer。 它們大致相同,但是(如下面的代碼所示)它們並不總是相同。 這是我的問題: 這段代碼工作得很完美。我做了一個通用的方法,printArray需要任何類型的變量的數組(因爲它是通用的)才能工作。 這裏我使用變量類型Integer。 但是,當我將我的數組類型'getal'更改爲int(而不是整數)時,方法printArray不起作用。這是爲什麼?泛型方法不適用於int類型變量嗎?泛型方法不能與'int'類型的變量一起使用嗎?

package Oefenen; 

public class printArray 
{ 
    public static void main (String args[]) 
    { 
     Integer[] getal = {10, 20, 30, 40, 50}; 
     printArray(getal); 
    } 

    public static <E> void printArray (E[] intArray) 
    { 
     for (E element : intArray) 
     { 
      System.out.printf("%s\n", element); 
     } 
    } 
} 

ps:如果我將通用方法更改爲僅用於int的方法,則它可以工作。 所以我想這個問題是:泛型方法不適用於int的。 Am I

+1

是的,你是對的。它們不適用於原始類型,但僅適用於類。 –

回答

7

泛型方法只能用於Object的子類型。整數是對象的子類型。 int不是一個對象,而是一個基元。所以這是預期的行爲。這link是非常有用的

此相關question也可能是有用

+0

真棒,只是我需要的信息,謝謝! :) – JordyV

3

仿製藥僅適用於類。 INT,如雙,浮法,等等......不是類

0

仿製藥僅適用於真正的工作類型,int是一個基本類型(如浮動,雙,...)

你可以,但是,使用自動裝箱,例如

int primitiveInt = 1; 

// this will 'autobox' (transform) the primitive type to a real type. 
Integer typedInt = primitiveInt; 

周圍的其他方法的工作原理也一樣,但要注意可能NullPointerException異常的,因爲一個真正的類型可以是零,這是不通過自動裝箱處理。 (基本類型始終採用默認值)

0

-雖然Generic可以用類,方法,變量,接口可以使用,但使用泛型的主要原因之一就是讓收藏類型安全。

-Generics涉及唯一對象int原始類型類型,但Integer包裝對象。由於是從Java 5引入的AutoBoxing,因此當您從int移動到Integer時,無法找到差異,反之亦然。

-Collection也當我們使用Generics時,然後使用包裝對象。

相關問題