什么是静态<e>?</e>

时间:2010-08-13 00:06:07

标签: java collections

我正在阅读收集java教程,并想知道为什么静态后需要<E>


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


谢谢, 萨拉

2 个答案:

答案 0 :(得分:9)

为了便于阅读,静态参数名和通用参数名之间通常有一个空格。 static将该方法声明为static,即不需要调用它的实例。 <E>声明有一个名为E的无界泛型参数,用于参数化方法的参数和/或返回值。这里,它在返回类型Set<E>中用于声明方法返回一组E,并在参数Collection<E>中指示该方法采用E的集合。

未指定E的类型,只是返回值和方法参数必须使用相同的类型进行一般参数化。编译器在调用方法时确定实际类型。例如,

   Collection<String> myStrings = new ArrayList<String>();
   .. add strings
   Set<String> uniqueStrings = SomeClass.removeDups(myStrings);

如果尝试对两个集合使用不同的参数化类型,例如

   Set<Integer> uniqueStrings = SomeClass.removeDups(myStrings);

这将生成编译器错误,因为通用参数不匹配。

答案 1 :(得分:2)

<E>是声明这是通用方法的一种方式,它是Java 5.0中Generics引入的一个特性

有关其用法和基本原理的详细信息,请参阅here