为什么我会收到错误" Smart Cast to' Long'不可能"在科特林?但它在Java中没问题吗?

时间:2017-11-20 07:01:07

标签: java kotlin

我尝试运行以下代码,但代码无法通过编译,我收到错误:

  

聪明的演员阵容' 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;
       }
    }
}

1 个答案:

答案 0 :(得分:6)

因为ivar,理论上可以通过空检查和加号操作之间的另一个线程来更改。

您可以使用let功能来解决它​​。它将i作为let的参数“捕获”fun change(): Long? { return i?.let { it + 10L } ?: 5L } 的值。

start_date