Intereting Posts
Kotlin – Как создать функцию псевдонима RxJava flatmap ()? Обработчик для запуска задачи каждые 5 секунд. Котлин Отказываясь от ответов API с помощью Mockito Почему компилятор Scala дает мне ошибку при передаче закрытого класса Kotlin в конструктор? Включение страницы входа для весны Сервер авторизации / ресурсов Тестирование почтовых запросов в Ktor Котлин аргументы по умолчанию в ошибке интерфейса? Как получить ссылку на пользовательские идентификаторы в значениях / ids.xml Kotlin, Java, multidex, Dagger 2, Butterknife and Realm: transformClassesWithJarMergingForDebug: дублирующаяся запись: org / jetbrains / annotations / NotNull.class эквивалентный интерфейс java на kotlin Изображение не отображается в Activity (это нормально в AppCompatActivity) Parse String шаблон вместо файла в Pebble Template Engine Преобразует ли файл Kotlin в java, добавив к нему java-код и вернувшись обратно в Kotlin так же, как добавление кода непосредственно в файл Kotlin? Класс абстрактных обобщений Котлина Скрипт Kotlin как параметры конфигурации Gradle, не использующие расширение

Как сопоставить 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();