是否有推荐的惯用方法将 Java 可选值调整为 Kotlin 可空值?

Vih*_*ung 0 java nullable kotlin option-type

我正在编写使用使用Optionals 的 Java 库的 Kotlin 代码,并且我更愿意在 Kotlin 世界中使用 Kotlin 的可空习惯用法。

例如,我的图书馆可能有一个功能

Optional<Foo> getFoo(String fooId) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

在我的 Kotlin 程序中我想

foo: Foo? = /* something, something */ getFoo(fooId)
Run Code Online (Sandbox Code Playgroud)

我知道我可以做类似的事情

lateinit var foo: Foo?
val fooOpt = getFoo(fooId)
if(fooOpt.isPresent) foo = fooOpt.get()
else foo = null
Run Code Online (Sandbox Code Playgroud)

但是,鉴于 Java 的Optional用途与可空值几乎相同,这似乎不必要地冗长,即使我将其折叠为

val foo: Foo? = getFoo(fooId).orElse(null)
Run Code Online (Sandbox Code Playgroud)

Swe*_*per 5

Kotlin 标准库中有一个内置方法可以实现此目的 - getOrNull.

val foo = getFoo(fooId).getOrNull()
Run Code Online (Sandbox Code Playgroud)

请注意,如果您使用orElse(null),则不应get先调用。

// this also works, but
// the difference here is that foo here will be a platform type,
// unless you say ": Foo?" explicitly
val foo = getFoo(fooId).orElse(null)
Run Code Online (Sandbox Code Playgroud)