Java Generics:语法解释

我是javagenerics的新手,我的问题是:

public static  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  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 } } 

这里的与返回类型无关; 这意味着这是一个通用函数,可以采用各种类型的数组。 为了更容易理解,代码可能是这样的:

 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.printArray( intArray ); // pass an Integer array System.out.println( "\nArray doubleArray contains:" ); GenericMethodTest.printArray( doubleArray ); // pass a Double array System.out.println( "\nArray characterArray contains:" ); GenericMethodTest.printArray( charArray ); // pass a Character array } } 

那么它是什么它告诉函数“有一个generics类型E并且你接受E数组,所以如果我用通用类型Integer调用你接受Integer[] 。”

但它不会改变返回类型。 就像public static不会改变返回类型一样。

如果你要编写,你可以通过定义一个通用变量类型

 public static void printArray( E[] inputArray ) 

Java将尝试查找名为E的类,因为您没有将E定义为generics。 两种情况下的返回值都为null,这个generics定义部分不是返回值的一部分,它是一个单独的函数签名块。

public static < E > void printArray( E[] inputArray )E仅用于表示Generic参数。 该方法的返回类型仍然void