Как сопоставить java.util.Optional <Something> с чем-то? в Котлине

У меня есть метод, который возвращает java.util.Optional<Something> . Я хочу использовать этот метод у Котлина, и я хочу, чтобы мой результат был Something? , Optional<Something>

Как это сделать в Котлине, идиоматично?

вызов .orElse(null) on Optional дает мне Something? действительно, но это выглядит не очень хорошо. Котлин не жалуется, если я пишу val msg: Something = optional.orElse(null). ( msg объявляется как Something , а не Something? Я потерял проверку типа компиляции).

Я использую Kotlin 1.0.3

Solutions Collecting From Web of "Как сопоставить java.util.Optional <Something> с чем-то? в Котлине"

Расширьте java API с помощью метода разворачивания. 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 .

orNull() лучше.

Например,

 // Java public class JavaClass public Optional<String> getOptionalString() { return Optional.absent(); } } // Kotlin val optionalString = JavaClass().getOptionalString().orNull() 

Определение orNull()

 /** * Returns the contained instance if it is present; {@code null} otherwise. If the instance is * known to be present, use {@link #get()} instead. * * <p><b>Comparison to {@code java.util.Optional}:</b> this method is equivalent to Java 8's * {@code Optional.orElse(null)}. */ @Nullable public abstract T orNull();