本文介绍了如何映射 java.util.Optional<Something>东西?在科特林的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个返回 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>东西?在科特林的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-06 09:21