Java类
class Processor{
Long getLatestOffset(){
return null
}
}
Kotlin测试
@Test
fun testNull() {
assertThat(processor.latestOffset).isNull() ---> Fails
assertThat(processor.latestOffset as Long?).isNull() --->Passes
}
任何人都可以解释其原因吗?我发现完全不需要铸造。
答案 0 :(得分:2)
Long
转换为Kotlin的Java成员默认值为Long!
,这意味着Kotlin不知道它在哪里可以为空。因此,科特林的零安全在这里丢失了。为了获得Kotlin null
,必须转换为Kotlin可为空的类型,否则将获得IllegalStateException
。
如果您在Java类中添加@Nullable
,它将在Kotlin中直接转换为Long?
。
如果在Java类中添加@NonNull
,它将在Kotlin中转换为Long
。