首页 >Java >java教程 >泛型方法中的多个通配符可以引用不同的类型吗?

泛型方法中的多个通配符可以引用不同的类型吗?

Linda Hamilton
Linda Hamilton原创
2024-12-06 14:18:15713浏览

Can Multiple Wildcards in Generic Methods Refer to Different Types?

泛型方法上的多个通配符

问题:泛型方法中的不同通配符是否可以指代完全不同的类型,并且嵌套通配符如何实现表现如何?

答案:

嵌套通配符是混乱的根源,而不是多个通配符。

  • 嵌套通配符: 列表>>是不是列表>因为 Java 泛型是不变的,也就是说 List 是不变的。不是列表。类似地,List>不是 List
  • 泛型方法中的通配符:

    • 泛型方法中允许使用多个不相关的通配符,例如,列表列表1,列表 list2.
    • 但是,list1 上的方法 addAll(list2) 是允许的,因为 ? 捕获的泛型类型两个列表中的通配符可以不同。
    • 如果通配符具有明确的上限(例如,? extends List>>),则适用其他限制。

片段说明:

  • LOLUnknowns1: MaybeIllegal 添加列表>列表到列表<列表>哈哈。这可以编译,因为 ?在列表可以引用任何类型,而 List> 可以引用任意类型。可以包含任何类型的列表。
  • LOLUnknowns1a: 当相同时?用于 List 和类型,编译失败,因为嵌套通配符的捕获转换规则禁止使用单个 ?对于两个列表。
  • LOLUnknowns1b: 当一个参数显式为 null 时,编译会成功,因为 null 适用于任何泛型类型并且不参与捕获转换。
  • DoubleLOL: 添加两个 List>>允许实例,因为捕获转换不递归应用,这意味着 ?可以引用每个列表中的不同类型。
  • IntoTheWild:创建列表>对于列表>不允许,因为捕获转换不是递归应用的。
  • IntoTheWild2: 捕获转换不能应用于内部列表类型,因此 List>不是 List>。

综上所述,泛型方法中的多个通配符可以灵活处理未知类型,而嵌套通配符对于捕获转换有特定的限制。

以上是泛型方法中的多个通配符可以引用不同的类型吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

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