Java泛型的“E”、“T”和“?”有什么区别?

2022-08-31 05:05:05

我遇到这样的Java代码:

public interface Foo<E> {}

public interface Bar<T> {}

public interface Zar<?> {}

上述所有三种说法有什么区别,它们在Java中如何称呼这种类型的类或接口声明?


答案 1

好吧,前两者之间没有区别 - 它们只是对类型参数(或)使用不同的名称。ET

第三个不是有效的声明 - 用作通配符,在提供类型参数时使用,例如 这意味着指的是某种类型的列表,但我们不知道是什么。?List<?> foo = ...foo

所有这些都是泛型,这是一个非常巨大的话题。您可能希望通过以下资源了解它,尽管当然还有更多可用的资源:


答案 2

它比其他任何东西都更常规。

  • T意味着是一个类型
  • E意味着是一个元素(:元素列表)List<E>
  • K是键(在Map<K,V>)
  • V是值(作为返回值或映射值)

它们是完全可互换的(尽管在同一声明中存在冲突)。


推荐