前段时间学习java泛型,现在学习集合,发现有些代码看不懂。这是代码:
static <E> List<E> nCopies(int n, E value)
它来自 java.util.Collections
类。
我的问题是为什么会有:
<E> List<E>
不仅如此
List<E>
显然我遗漏了一些东西,有人可以为我澄清一下吗?
最佳答案
您使用 <E>
代表您正在定义的方法。
泛型最常见的例子是有一个像这样的类型化类:
public class SomeClass<E> {
...
}
然后,当您创建该类的新对象时,您可以像这样直接定义类型:
new SomeClass<String>();
这样,该类中任何引用 <E>
的方法, 将对待 <E>
作为一个字符串,对于那个例子。
现在考虑一个静态方法(它不绑定(bind)到类的任何特定实例),为了对该方法进行典型化,您使用了另一种适用于方法的典型化,如下所示:
static <E> List<E> nCopies(int n, E value)
您使用 <E>
在返回类型之前说“这个特定的方法在执行时会考虑一些 E”。什么<E>
将在您调用该方法时决定:
nCopies(3, "a");
在这个例子中 <E>
将是一个字符串,因此返回类型将为 List<String>
.
最后,您甚至可以将它们混合使用:
public class SomeClass<E> {
public <F> void doSomething(E e, F f) {
...
}
}
在这种情况下,如果您有 SomeClass 的实例,则 doSomething 方法中的 E 将始终是 String(对于该实例),但 F 可以是您想要的任何内容。
关于java - 为什么这个泛型方法中多了一个<E>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8116440/