什么是静态<E>?

sar*_*Fly 5 java collections

我只是通过收集java教程阅读并想知道为什么<E> 静态后需要它?


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


谢谢,莎拉

mdm*_*dma 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);
Run Code Online (Sandbox Code Playgroud)

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

   Set<Integer> uniqueStrings = SomeClass.removeDups(myStrings);
Run Code Online (Sandbox Code Playgroud)

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