Java 类型推断与语法规则详解
1. 类型推断的应用
类型推断在某些情况下会产生虚假错误,尤其是当 lambda 表达式具有显式参数类型,且这些类型与通配符边界不对应时。例如:
Predicate<? super Integer> p = (Number n) -> n.equals(23);
在这个例子中,lambda 表达式是 Predicate<Number> 类型,它是 Predicate<? super Integer> 的子类型,但不是 Predicate<Integer> 的子类型。这里的分析用于推断 Number 是 Predicate 类型参数的合适选择。
需要注意的是,这里的分析虽然是基于一般类型推断进行描述的,但故意设计得相当简单。唯一的约束是相等约束,这意味着归约相当于简单的模式匹配。更强大的策略可能还会从 lambda 表达式的主体推断约束,但考虑到与周围和/或嵌套泛型方法调用的推断可能存在的交互,这会引入很多额外的复杂性。
1.1 更具体的方法推断
当测试一个适用方法是否比另一个更具体时(其中第二个方法是泛型方法),需要测试是否可以推断出第二个方法的类型参数的某个实例化,以使第一个方法比第二个方法更具体。
设 m1 为第一个方法, m2
超级会员免费看
订阅专栏 解锁全文

131

被折叠的 条评论
为什么被折叠?



