通用返回对象

时间:2012-01-18 19:56:13

标签: java collections

最近,当我遇到这段代码时,我正在阅读oracle collection教程中的以下代码。

public static <E> Set<E> removeDups(Collection<E> c) {
             return new LinkedHashSet<E>(c);
}

我无法理解返回值为什么

            <E> Set<E> and not just Set<E> ?

5 个答案:

答案 0 :(得分:7)

实际上,返回类型只是Set<E>

另一个<E>表示这是一个通用方法,并声明E是泛型的参数。如果没有这个<E>,编译器会认为E是一个现有的类,并会尝试找到它(如果没有名为E的类在范围内,则会产生错误。)

答案 1 :(得分:2)

只是Set,一个类型为E的元素更加精确。返回类型前面的额外<E>是该方法的类型声明,指定类型<E>仅在此特定方法的范围内使用 - 不要与类混淆'type参数,如下所示:

public class Example<E> {

在上面的代码片段中,类型参数<E>对于类中的所有方法都是可见的,而类型声明(如问题中的类型声明)仅在该方法中可见。

答案 2 :(得分:2)

返回类型为Set<E>而不是<E> Set<E>。第一个<E>声明泛型类型变量E,而附加到集合类的其他<E>使用该声明。

答案 3 :(得分:0)

E可能是一个班级。通过返回<E> Set<E>,您声明E是通用中的参数。

这是一个静态函数,因此没有E的基本定义。

答案 4 :(得分:0)

是的,第一个似乎有点奇怪。思考第一种方法的一种方式是它说(或提醒你)编译器将根据传入的Collection的类型找出E本身,而你,用户,不要我需要明确告诉它E是什么。