我正在编写使用
Optional
s 的 Java 库的 Kotlin 代码,并且我更愿意在 Kotlin 世界中使用 Kotlin 的可空习惯用法。
例如我的图书馆可能有一个功能
Optional<Foo> getFoo(String fooId) {
...
}
在我的 Kotlin 程序中我想
foo: Foo? = /* something, something */ getFoo(fooId)
我知道我可以做类似的事情
lateinit var foo: Foo?
val fooOpt = getFoo(fooId)
if(fooOpt.isPresent) foo = fooOpt.get()
else foo = null
但是,鉴于 Java 的
Optional
的用途与可空值几乎相同,这似乎不必要地冗长,即使我将其折叠为
val foo: Foo? = getFoo(fooId).get().orElse(null)
是的,当使用使用Optional的Java代码并且您想要使其适应Kotlin时,Kotlin中有一些惯用的方法来处理Optional和可为空类型之间的转换。
一种常见的方法是使用Optional上的orElse(null)方法将其转换为Kotlin中的可空类型。这是一个例子:
val optionValue:Optional = // Java 代码中的一些可选值 val nullableValue:字符串? = 可选值.orElse(null)
是的,当使用使用Optional的Java代码并且您想要使其适应Kotlin时,Kotlin中有一些惯用的方法来处理Optional和可为空类型之间的转换。
一种常见的方法是使用Optional上的orElse(null)方法将其转换为Kotlin中的可空类型。这是一个例子:
科特林 复制代码 val optionValue:Optional = // Java 代码中的一些可选值 val nullableValue:字符串? = 可选值.orElse(null) 在这个例子中,如果Optional有一个值,它将被解包;否则,null 将被分配给 nullableValue。这种方法简洁明了。
从 Kotlin 1.3 开始,还可以使用 kotlin-stdlib-jdk8 库提供的 toNullable() 扩展函数将Optional 转换为可空类型: