Java泛型的“E”、“T”和“?”有什么区别?
我遇到这样的Java代码:
public interface Foo<E> {}
public interface Bar<T> {}
public interface Zar<?> {}
上述所有三种说法有什么区别,它们在Java中如何称呼这种类型的类或接口声明?
我遇到这样的Java代码:
public interface Foo<E> {}
public interface Bar<T> {}
public interface Zar<?> {}
上述所有三种说法有什么区别,它们在Java中如何称呼这种类型的类或接口声明?
好吧,前两者之间没有区别 - 它们只是对类型参数(或)使用不同的名称。E
T
第三个不是有效的声明 - 用作通配符,在提供类型参数时使用,例如 这意味着指的是某种类型的列表,但我们不知道是什么。?
List<?> foo = ...
foo
所有这些都是泛型,这是一个非常巨大的话题。您可能希望通过以下资源了解它,尽管当然还有更多可用的资源:
它比其他任何东西都更常规。
T
意味着是一个类型E
意味着是一个元素(:元素列表)List<E>
K
是键(在Map<K,V>
) V
是值(作为返回值或映射值)它们是完全可互换的(尽管在同一声明中存在冲突)。