问题描述
我有一个返回 java.util.Optional
的方法.我想使用 Kotlin 的那个方法,并且我希望我的结果是 Something?
,而不是 Optional
I have a method that returns java.util.Optional<Something>
.I want to use that method from Kotlin, and I want my result to be Something?
, not Optional<Something>
如何在 Kotlin 中以惯用的方式做到这一点?
How to do that in Kotlin, in idiomatic way?
在 Optional
上调用 .orElse(null)
确实给了我 Something?
,但它看起来并不好.如果我写 val msg:Something = optional.orElse(null),Kotlin 不会抱怨.
(msg
被声明为 Something
,而不是 有什么?
-我没有进行编译类型检查).
calling .orElse(null)
on Optional
gives me Something?
indeed, but it does not look good. Kotlin does not complain if I write val msg: Something = optional.orElse(null).
(msg
is declared as Something
, not Something?
- I loose compile-type check).
我使用 Kotlin 1.0.3
I use Kotlin 1.0.3
推荐答案
用一个方法扩展 java API 来解包 Optional
:
Extend the java API with a method to unwrap Optional
:
fun <T> Optional<T>.unwrap(): T? = orElse(null)
然后随意使用它:
val msg: Something? = optional.unwrap() // the type is enforced
参见 https://kotlinlang.org/docs/reference/extensions.html详情.
这篇关于如何映射 java.util.Optional<Something>东西?在科特林的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!