Java Generics:语法说明

时间:2014-09-12 09:54:35

标签: java generics

我是java泛型的新手,我的问题是:

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

在上面的语句中,当函数的返回类型无效时,为什么我们在E之前使用了void?为什么这种语法有效?

根据理论,方法本身可以是返回类型吗?

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

3 个答案:

答案 0 :(得分: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>告诉函数&#34;有一个泛型类型E,你接受E的数组,所以如果我打电话您使用通用类型Integer即表示您接受Integer[]。&#34;

更改返回类型。就像public static没有改变返回类型一样。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

如果您要编写

,请按<E>定义通用变量类型
public static void printArray( E[] inputArray )

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