java - 为什么这个泛型方法中多了一个<E>?

标签 java generics methods

前段时间学习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/

相关文章:

java - 将 FX 嵌入到 swing 中时出现问题

java - java中的自定义通用集合Trim类

c# - 通过检查其通用类型来查找具有反射的特定属性

C++:在方法内部可以从类创建未初始化的对象吗?

java - 存储嵌套列表

java - 无法使用Gradle输出jar文件

java - 这个方法有什么作用?

java - 添加 spring-boot-starter-parent 会删除 javax.validation.*

java - 是否可以创建一个适用于 Java 中不同类的泛型方法?

java - 将数组数据输入到与另一个类中的另一个方法不同的类中的方法中