从Java返回的null在Kotlin测试中比较失败

从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 } 有人能解释一下原因吗?我觉得这完全

Java类

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的空安全性在这里丢失了。为了获得Kotlin
null
,必须强制转换为Kotlin nullable类型,否则将获得
IllegalStateException

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


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

您能告诉我在哪里可以找到
assertThat()
的文档吗?使用
==
null
进行简单比较,得出两者的
true
。您是对的,这似乎是库中的问题。已验证断言(adapter.latestOffset==null)正在传递。