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

为什么我在Kotlin中得到错误“智能转换为‘长’是不可能的”?但在爪哇就可以了?[副本]

傅元龙
2023-03-14

我试着运行下面的代码,但是代码不能通过编译,我得到了错误:

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

因为i是一个var,所以理论上可以通过另一个线程在null检查和加号操作之间更改它。

您可以使用let函数来解决它。它将通过将i作为参数提供给let来“捕获”i的值。

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