我遇到这样的Java代码:
public interface Foo<E> {}
public interface Bar<T> {}
public interface Zar<?> {}
以上三者之间有什么区别?他们在 Java 中将这种类型的类或接口声明称为什么?
原文由 ace 发布,翻译遵循 CC BY-SA 4.0 许可协议
我遇到这样的Java代码:
public interface Foo<E> {}
public interface Bar<T> {}
public interface Zar<?> {}
以上三者之间有什么区别?他们在 Java 中将这种类型的类或接口声明称为什么?
原文由 ace 发布,翻译遵循 CC BY-SA 4.0 许可协议
这比什么都重要。
T
是一种类型E
是一个元素( List<E>
:元素列表)K
是关键(在 Map<K,V>
中)V
是值(作为返回值或映射值)它们是完全可以互换的(尽管在同一声明中存在冲突)。
原文由 ratchet freak 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
那么前两者之间没有区别 - 它们只是为 类型参数 使用不同的名称(
E
或T
)。第三个不是有效声明 -
?
用作提供类型 参数 时使用的 _通配符_,例如List<?> foo = ...
表示foo
某种类型的列表,但我们不知道是什么。所有这些都是 _泛型_,这是一个相当大的话题。您可能希望通过以下资源了解它,当然还有更多可用资源: