即使在kotlin

时间:2018-02-26 13:55:43

标签: android kotlin

我在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有关?

2 个答案:

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