我尝试运行以下代码,但代码无法通过编译,我收到错误:
聪明的演员阵容' Long'是不可能的,因为'我'是一个可变的财产 这个时候本可以改变的
为什么?
class MyClass1(var i: Long?) {
fun change(): Long? {
if (i != null) {
return i + 10L
} else {
return 5L
}
}
}
我用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;
}
}
}
答案 0 :(得分:6)
因为i
是var
,理论上可以通过空检查和加号操作之间的另一个线程来更改。
您可以使用let
功能来解决它。它将i
作为let
的参数“捕获”fun change(): Long? {
return i?.let { it + 10L } ?: 5L
}
的值。
start_date