我尝试运行以下代码,但代码无法通过编译,我收到错误:
智能转换为'Long'是不可能的,因为'i'是一个可变的属性,可以在这个时候改变
为什么?
class MyClass1(var i: Long?) {
fun change(): Long? {
if (i != null) {
return i + 10L
} else {
return 5L
}
}
}
Run Code Online (Sandbox Code Playgroud)
我用Java编写了代码MyClass2,它可以很好地工作,为什么?
class MyClass2{
private Long i;
public MyClass2(Long k){
i=k;
}
public Long change(){
if (i!=null){
return i+10L;
}else {
return 5L;
}
}
}
Run Code Online (Sandbox Code Playgroud)
因为i是a var,理论上可以通过null检查和加号操作之间的另一个线程来改变它.
您可以使用该let功能来解决它.它将"捕获" i它作为参数的值let.
fun change(): Long? {
return i?.let { it + 10L } ?: 5L
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
458 次 |
| 最近记录: |