为什么此通用方法中有一个额外的<E>?
我前段时间学习了java泛型,但现在我正在学习集合,并发现了一些我不理解的代码。代码如下:
static <E> List<E> nCopies(int n, E value)
它来自类 。java.util.Collections
我的问题是为什么有:
<E> List<E>
而且不仅如此
List<E>
显然我错过了一些东西,有人可以为我澄清一下吗?
我前段时间学习了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>
现在考虑一个静态方法(它不绑定到类的任何特定实例),为了对该方法进行类型化,您使用了另一种适用于方法的类型化,如下所示:
static <E> List<E> nCopies(int n, E value)
您可以使用前面的返回类型来表示“此特定方法在执行时将考虑一些 E”。调用该方法时将决定将决定什么:<E>
<E>
nCopies(3, "a");
在此示例中,将是一个 String,因此返回类型将是 .<E>
List<String>
最后,您甚至可以将它们混合在一起:
public class SomeClass<E> {
public <F> void doSomething(E e, F f) {
...
}
}
在这种情况下,如果您有 SomeClass 的实例,则 doSomething 方法中的 E 将始终为 String(对于该实例),但 F 可以是您想要的任何内容。