类型推断
Norm 的公开声明保持类型前置和显式。类型推断主要服务于泛型调用、控制表达式结果与局部模式绑定,而不是省略 API 签名。
推断位置
norm
List<String> names = emptyList()
String first = identity(value: "Norm")编译器可以根据实参、赋值目标和泛型约束推断函数的类型参数。字段和参数类型不能省略。函数省略返回类型时使用声明位置决定的固定语义,不根据函数体推断:顶层为 Void,class 方法为 owner 类型。
约束求解
对每个类型参数,编译器收集:
- 实参类型产生的下界或等式;
- 赋值目标产生的期望类型;
extends声明产生的上界;- nullable 与型变规则产生的附加约束。
求解必须得到唯一、满足全部上界的类型。普通约束无法确定的尾部参数若声明了默认类型,则按声明顺序展开默认值;其他无法确定的参数要求调用者显式提供。
norm
List<String> names = emptyList<String>()不执行的推断
- 不根据函数体补全公开签名;
- 不通过隐式数值收窄寻找候选;
- 不把
null单独推断为任意 nullable 类型; - 不跨模块猜测未声明的结构类型关系。
形式化约束与算法见泛型推断。