Kotlin 为什么编译器契约只允许引用函数参数
在编写验证函数时,这些验证函数通常会检查可空性。即使在调用这些函数之后,对象成员可以像不可为null一样安全地使用,Kotlin编译器契约也不允许指定这种行为 例如:Kotlin 为什么编译器契约只允许引用函数参数,kotlin,kotlin-contracts,Kotlin,Kotlin Contracts,在编写验证函数时,这些验证函数通常会检查可空性。即使在调用这些函数之后,对象成员可以像不可为null一样安全地使用,Kotlin编译器契约也不允许指定这种行为 例如: 数据类EmployeeDto( val名称:字符串?, val经度:字符串?, 瓦尔纬度:字符串? ) { @实验合同 乐趣验证(){ //约定{returns()表示(this.name!=null&&this.longitude!=null&&this.latitude!=null)} //合同说明错误:合同说明中只允许引用参
数据类EmployeeDto(
val名称:字符串?,
val经度:字符串?,
瓦尔纬度:字符串?
) {
@实验合同
乐趣验证(){
//约定{returns()表示(this.name!=null&&this.longitude!=null&&this.latitude!=null)}
//合同说明错误:合同说明中只允许引用参数
if(name.isNullOrEmpty())
抛出RequiredValueNotSetException(“名称已设置为\“$Name\”,但不能为null或空)
if(longitude.isNullOrEmpty())
抛出RequiredValueNotSetException(“经度设置为\“$Longitude\”,但不能为null或空)
if(latitude.isNullOrEmpty())
抛出RequiredValueNotSetException(“纬度设置为\“$Latitude\”,但不能为null或空)
}
这一限制背后的基本原理是什么,或者这是计划在未来添加的功能
这一限制背后的理由是什么
Kotlin契约在设计和实现方面都是一个实验性的特性。很多约束都存在,因为使用这些约束实现契约更容易/更快
这是计划在将来添加的功能吗
未来可能会取消仅参考方法参数的限制
很难说kotlin合同会发生什么,因为除了合同和相应的合同之外,没有任何正式的合同路线图。
在一位kotlin团队成员的评论中提到,在新的编译器前端(其本身仍处于开发阶段)之后,将出现一些合同改进