2014-09-12 100 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