Java泛型方法的返回类型

37

我想知道为什么返回空值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>的真正含义是什么呢?


值得注意的是,在这里不需要 <E>。该方法同样可以接受一个对象数组。 - shmosel
5个回答

140

这个问题适合我的一些旧笔记。我希望这个图示能够帮助:

输入图像描述 输入图像描述


2
很好的答案 +1,也许值得一提的是,在您的第一种方法中,您可以使用Void(大写'V')作为返回类型T...尽管'y'必须具有空值。 - Rhubarb
如果类型可以从类类型推断出来,则在方法中不需要添加到答案中。 - lupchiazoem
3
我不会给你点踩,但是就格式而言,这个回答很糟糕——无法搜索、复制等。 - František Hartman
很棒的答案,解释得非常清楚。 - user2045474
非常好的解释。 - user2045474

11

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

它不是返回类型 - 返回类型出现在类型参数声明之后,在方法名之前。因此,在您提问中的printArray方法的返回类型仍然是void

更多关于方法声明的详细信息,请参见JLS第8.4节


6

这里的 E 并不代表返回对象的类型。它表示方法签名中的 E 是一个泛型类型,而不是具体类型。如果没有它,编译器会在方法的参数中寻找一个叫做 E 的类。


4

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


3

E在Gen函数调用时会被替换为实际类型。

假设E可以被替换为整数


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接