You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java泛型使用通配符时的类型推断规则探究

通配符目标类型下的ArrayList菱形语法类型推断

当使用菱形语法new ArrayList<>()且目标类型包含通配符时,编译器会基于通配符的约束选择最合理的实际类型参数,以下是两种场景的具体推断逻辑:

1. 目标类型为ArrayList<? super Number>

编译器会推断Number作为ArrayList的实际类型参数,等价于:

ArrayList<? super Number> list1 = new ArrayList<Number>();

原因:? super Number是下界通配符,允许的类型是Number或其父类。编译器会选择最具体的符合约束的类型(即下界本身Number),这样既满足目标类型的通配符要求,又能最大化后续操作的灵活性——比如可以向list1中添加Number及其子类的实例。

2. 目标类型为ArrayList<? extends Number>

编译器会推断Number作为ArrayList的实际类型参数,等价于:

ArrayList<? extends Number> list2 = new ArrayList<Number>();

原因:? extends Number是上界通配符,允许的类型是Number或其子类。编译器会选择最宽泛的符合约束的类型(即上界本身Number),这样实例既能适配目标类型的通配符约束,又能兼容对所有Number子类元素的读取操作(虽然通配符本身限制了添加操作,但推断的类型保证了实例的最大适配范围)。

内容的提问来源于stack exchange,提问作者Priyshrm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 15:14:53