我正在阅读收集java教程,并想知道为什么静态后需要<E>
?
public static<E> Set<E> removeDups(Collection<E> c) { return new LinkedHashSet(c); }
谢谢, 萨拉
答案 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。