Java 泛型 : Syntax Explanation

标签 java generics

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

最佳答案

<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不改变返回类型。

关于Java 泛型 : Syntax Explanation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25805550/

相关文章:

c# - 有界类型变量 Java 与 C#

c# - 我如何在内部保留泛型类型参数的始终可为 null 的等价物?

java - Java 中的不变性、协变性和逆变性

c# - 无论如何将泛型参数默认为某种类型?

java - 位图在android中总是返回null

java - C# 和 Java 服务器之间的 TCP 通信

java - Android java客户端程序使用单独的线程进行套接字IO,找不到使用按钮发送数据的方法

java - 当对象类型可用时,为什么需要通配符?

java - 寻找一些有关让 Java 与网站通信的信息

java - 可执行jar找不到打包资源