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
。