33

我想知道为什么void(或可以)以这种方式声明不返回任何内容的泛型方法:

   public static <E> void printArray( E[] inputArray ) {
     // Display array elements              
     for ( E element : inputArray ){        
        System.out.printf( "%s ", element );
     }
     System.out.println();
   }

看起来像是<E>返回对象的类型,但该方法实际上什么也没返回。那么<E>在这种情况下具体和一般方法中的真正含义是什么?

4

5 回答 5

127

这个问题适合我的旧笔记之一。我希望这个插图有帮助:

在此处输入图像描述 在此处输入图像描述

于 2013-04-04T13:22:06.543 回答
10

<E>泛型类型参数声明。它的意思是“这个方法有一个单一的类型参数,叫做E,它可以是任何类型”。

它不是返回类型——它出现类型参数声明之后,就在方法名称之前。所以printArray你的问题中方法的返回类型仍然是void.

有关方法声明的更多详细信息,请参阅JLS 的第 8.4 节。

于 2012-07-07T17:41:57.170 回答
5

它不是返回对象的类型。它表明E,在方法签名中,是泛型类型而不是具体类型。没有它,编译器会寻找一个以E方法参数命名的类。

于 2012-07-07T17:41:50.687 回答
3

< E > 称为形式类型参数。它不是方法的返回类型。它基本上说该方法可以接受不同类型的参数数组(E [] inputArray)。

于 2012-07-07T17:43:11.773 回答
2

E用作在调用此函数时将传递给 Gen 函数的实际类型的占位符。

假设E可以用整数代替

于 2012-07-07T17:55:14.597 回答