Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 为什么编译器契约只允许引用函数参数_Kotlin_Kotlin Contracts - Fatal编程技术网

Kotlin 为什么编译器契约只允许引用函数参数

Kotlin 为什么编译器契约只允许引用函数参数,kotlin,kotlin-contracts,Kotlin,Kotlin Contracts,在编写验证函数时,这些验证函数通常会检查可空性。即使在调用这些函数之后,对象成员可以像不可为null一样安全地使用,Kotlin编译器契约也不允许指定这种行为 例如: 数据类EmployeeDto( val名称:字符串?, val经度:字符串?, 瓦尔纬度:字符串? ) { @实验合同 乐趣验证(){ //约定{returns()表示(this.name!=null&&this.longitude!=null&&this.latitude!=null)} //合同说明错误:合同说明中只允许引用参

在编写验证函数时,这些验证函数通常会检查可空性。即使在调用这些函数之后,对象成员可以像不可为null一样安全地使用,Kotlin编译器契约也不允许指定这种行为

例如:

数据类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团队成员的评论中提到,在新的编译器前端(其本身仍处于开发阶段)之后,将出现一些合同改进