从Java返回的null在Kotlin测试中比较失败
Java类从Java返回的null在Kotlin测试中比较失败,kotlin,Kotlin,Java类 class Processor{ Long getLatestOffset(){ return null } } 科特林试验 @Test fun testNull() { assertThat(processor.latestOffset).isNull() ---> Fails assertThat(processor.latestOffset as Long?).isNull() --->Passes } 有人能解释一下原因吗?我觉得这完全
class Processor{
Long getLatestOffset(){
return null
}
}
科特林试验
@Test
fun testNull() {
assertThat(processor.latestOffset).isNull() ---> Fails
assertThat(processor.latestOffset as Long?).isNull() --->Passes
}
有人能解释一下原因吗?我觉得这完全没有必要。
Long
Java成员翻译成Kotlin默认值是Long代码>,这意味着Kotlin不知道它在哪里可以为null。因此Kotlin的空安全性在这里丢失了。为了获得Kotlinnull
,必须强制转换为Kotlin nullable类型,否则将获得IllegalStateException
如果在Java类中添加@Nullable
,它将直接转换为Kotlin中的Long?
如果您在Java类中添加@NonNull
,它将在Kotlin中转换为Long
。您能告诉我在哪里可以找到assertThat()
的文档吗?使用==
和null
进行简单比较,得出两者的true
。您是对的,这似乎是库中的问题。已验证断言(adapter.latestOffset==null)正在传递。