我在Android工作室的Kotlin中有这个代码:
result.put(REGISTER_DATE, if (activityData.registerDate == null) -1 else activityData.registerDate.totalDays)
正如您所看到的,我检查registerDate不为null,但我必须在activityData.registerDate
之后放置非null断言以消除null错误:
result.put(REGISTER_DATE, if (activityData.registerDate == null) -1 else activityData.registerDate!!.totalDays)
这是Kotlin中的错误还是与Android Studio有关?
答案 0 :(得分:3)
这是Kotlin中的错误还是与Android Studio有关?
它既不是。 activity.registerDate
是对象的可变可空属性,因此它可以(理论上)在任何时候由另一个线程更改。 Kotlin编译器没有足够的知识证明这是一个无可争辩的事实,即当你第二次加载它时,属性的值不会改变。
避免这种情况的典型方法是只加载一次属性,将其捕获到局部变量中。在您正在展示的特定情况下,您只需要Elvis运算符:
activityData.registerDate?.totalDays ?: -1
答案 1 :(得分:3)
可能你正在检查可变属性(var
)。由于可能的并发问题,Kotlin编译器不会对非空值执行智能转换。
顺便说一下,还有另一种Kotlin方法可以做这样的检查:
result.put(REGISTER_DATE, activityData.registerDate?.totalDays ?: -1)