泛型方法上的多个通配符
问题:泛型方法中的不同通配符是否可以指代完全不同的类型,并且嵌套通配符如何实现表现如何?
答案:
嵌套通配符是混乱的根源,而不是多个通配符。
-
嵌套通配符: 列表>>是不是列表>因为 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中文网其他相关文章!