2014-09-12 68 views
2

我是新來的Java泛型我的問題是:Java泛型:語法解釋

public static <E> void printArray(E[] inputArray) 

在上面的語句時,函數的返回類型爲void,那麼爲什麼我們void之前使用E?爲什麼這個語法是有效的?

按照理論,一個方法本身可以是一個返回類型?

Then suppose E = method_abc then how compiler will manage 

public static method_abc void printArray (E[] Array) 

我的參考方案是

public class GenericMethodTest 
{ 
    // generic method printArray       
    public static <E> void printArray(E[] inputArray) 
    { 
     // Display array elements    
     for (E element : inputArray){   
      System.out.printf("%s ", element); 
     } 
     System.out.println(); 
    } 

    public static void main(String args[]) 
    { 
     // Create arrays of Integer, Double and Character 
     Integer[] intArray = { 1, 2, 3, 4, 5 }; 
     Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 }; 
     Character[] charArray = { 'H', 'E', 'L', 'L', 'O' }; 

     System.out.println("Array integerArray contains:"); 
     printArray(intArray ); // pass an Integer array 

     System.out.println("\nArray doubleArray contains:"); 
     printArray(doubleArray); // pass a Double array 

     System.out.println("\nArray characterArray contains:"); 
     printArray(charArray); // pass a Character array 
    } 
} 

回答

2

這裏的<E>與返回類型無關;這意味着這是一個通用函數,可以採用各種類型的數組。爲了更容易理解,代碼可能是這樣的:

public class GenericMethodTest 
{ 
    // generic method printArray       
    public static <E> void printArray(E[] inputArray) 
    { 
     // Display array elements    
     for (E element : inputArray){   
      System.out.printf("%s ", element); 
     } 
     System.out.println(); 
    } 

    public static void main(String args[]) 
    { 
     // Create arrays of Integer, Double and Character 
     Integer[] intArray = { 1, 2, 3, 4, 5 }; 
     Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 }; 
     Character[] charArray = { 'H', 'E', 'L', 'L', 'O' }; 

     System.out.println("Array integerArray contains:"); 
     GenericMethodTest.<Integer>printArray(intArray ); // pass an Integer array 

     System.out.println("\nArray doubleArray contains:"); 
     GenericMethodTest.<Double>printArray(doubleArray); // pass a Double array 

     System.out.println("\nArray characterArray contains:"); 
     GenericMethodTest.<Character>printArray(charArray); // pass a Character array 
    } 
} 

所以<E>它告訴函數「有一個通用型E並且您接受E陣列,什麼,所以例如如果我請撥打Integer的通用類型,您接受Integer[]。「

它確實不是雖然改變返回類型。就像public static不會更改返回類型。

+0

[Blalasaadri]先生謝謝:) – 2014-09-12 10:13:02

1

public static <E> void printArray(E[] inputArray), 的E只是用來表示一個泛型參數。該方法的返回類型仍爲void

+0

[Rrevo]先生比你:) – 2014-09-12 10:13:33

1

通過<E>你定義一個通用的變量類型,如果你會寫

public static void printArray(E[] inputArray) 

Java將嘗試找到名稱E一類,因爲你沒有定義E作爲一種通用的。 這兩種情況下的返回值都是null,這個<E>泛型定義部分不是返回值的一部分,它是一個單獨的函數簽名塊。

+0

[德米特里Spikhalskiy]謝謝先生:) – 2014-09-12 10:12:36