70、Java 类型推断与语法规则详解

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

「LLM那些事」系列第 4 篇《上下文窗口的边界》,文章连接:https://blog.csdn.net/houwenjin/article/details/163999753。 演示什么:在「预测」Sheet 的黄色格子里输入一句话(默认「来泡一杯」),四个「模型」——分别只统计最后 1 / 2 / 3 / 4 个字的 n-gram 查表——同时预测下一个字。同一个输入,看的上下文越长,候选越少、预测越确定: ┌────────────────┬──────────┬───────────────┬──────┐ │ 只看最后几个字 │ 用的前缀 │ 候选下一字数 │ 预测 │ ├────────────────┼──────────┼───────────────┼──────┤ │ 1 个 │ 杯 │ 3(茶/子/水) │ 模糊 │ ├────────────────┼──────────┼───────────────┼──────┤ │ 2 个 │ 一杯 │ 2(茶/水) │ 收窄 │ ├────────────────┼──────────┼───────────────┼──────┤ │ 3 个 │ 泡一杯 │ 1(茶) │ 确定 │ ├────────────────┼──────────┼───────────────┼──────┤ │ 4 个 │ 来泡一杯 │ 1(茶) │ 确定 │ └────────────────┴──────────┴───────────────┴──────┘
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值