gpt4 book ai didi

java - 为什么这个泛型方法中多了一个

转载 作者:搜寻专家 更新时间:2023-10-30 20:59:22 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com