从Java返回的null无法在Kotlin测试中进行比较

时间:2018-11-05 05:17:06

标签: kotlin

Java类

class Processor{
  Long getLatestOffset(){
    return null
  }
}

Kotlin测试

@Test
fun testNull() {
  assertThat(processor.latestOffset).isNull() ---> Fails
  assertThat(processor.latestOffset as Long?).isNull() --->Passes
}

任何人都可以解释其原因吗?我发现完全不需要铸造。

1 个答案:

答案 0 :(得分:2)

Long转换为Kotlin的Java成员默认值为Long!,这意味着Kotlin不知道它在哪里可以为空。因此,科特林的零安全在这里丢失了。为了获得Kotlin null,必须转换为Kotlin可为空的类型,否则将获得IllegalStateException

如果您在Java类中添加@Nullable,它将在Kotlin中直接转换为Long?

如果在Java类中添加@NonNull,它将在Kotlin中转换为Long