首页 >Java >java教程 >Java 泛型:` 有什么用?超级`关键字?

Java 泛型:` 有什么用?超级`关键字?

Susan Sarandon
Susan Sarandon原创
2024-11-28 01:37:14227浏览

Java Generics: What's the Deal with the `? super` Keyword?

Java 泛型:解开“Super”关键字之谜

尽管探索了有关泛型的各种资源,但您仍然会遇到关于 'Super' 的困惑。超级'关键字。让我们深入研究在 Java 泛型中使用“super”的复杂性来澄清这些疑虑。

1.揭开与“?”的矛盾super Number'

将集合声明为“List super Number>',您可能会假设它可以保存 Number 的父对象。然而,情况恰恰相反:可以添加整数,但不能添加对象。

原因在于捕获转换。 '列表'只能捕获可以扩展 Number 及其超类型的类型。由于 Object 是 Number 的超类,但不是扩展,因此无法捕获它。然而,Integer 是 Number 的子类型,因此可以相加。

2.用“List”解读行为和 'test()'

编译 'test(sList);'失败,因为 'List'不能通过 'List 进行捕获转换?超级数>'。虽然 String 是 Object 的超类型,但 Object 并不是 Number 的扩展。这违反了捕获转换规则。

总之,'? super T' 表示该集合可以保存类型 T 或其任何扩展兼容超类的对象。但是,这并不包括所有超类型,仅包括那些扩展指定类型的超类型。

3.为什么是“”被禁止

Java 不允许 ''因为它会导致模棱两可的情况。例如,“List”可能会捕获“List”和“列表” (因为 Object 是所有对象的超类型)。这会违反泛型类型安全。

以上是Java 泛型:` 有什么用?超级`关键字?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn