当前位置: 首页 > 知识库问答 >
问题:

为什么我在 Kotlin 中收到错误“智能投射到'Long'是不可能的”?但是在java中还可以吗?[重复]

董建德
2023-03-14

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

智能强制转换为“Long”是不可能的,因为“I”是一个可变属性,可能已经被更改了

为什么?

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个答案

张嘉佑
2023-03-14

因为< code>i是一个< code>var,所以理论上它可以在空检查和加法运算之间被另一个线程改变。

您可以使用<code>let</code>函数来求解它。它将<code>i</code>的值作为参数提供给<code>let</code>来“捕获”该值。

fun change(): Long? {
    return i?.let { it + 10L } ?: 5L
}
 类似资料: