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

新手上路,请多包涵

我遇到这样的Java代码:

 public interface Foo<E> {}

public interface Bar<T> {}

public interface Zar<?> {}

以上三者之间有什么区别?他们在 Java 中将这种类型的类或接口声明称为什么?

原文由 ace 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 703
2 个回答

那么前两者之间没有区别 - 它们只是为 类型参数 使用不同的名称( ET )。

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

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

原文由 Jon Skeet 发布,翻译遵循 CC BY-SA 3.0 许可协议

这比什么都重要。

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

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

原文由 ratchet freak 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题