Intereting Posts
Android: код работает с api 19, но не с api 24 Как разделить строку с набором разделителей и найти, что это за разделитель? Котлин Запечатанный класс данных в Котлине Тип вывода с функциональными строителями Kotlin & Hibernate IllegalArgumentException: Не удается установить поле Строка Job.name для задания Поведение System.identityHashCode () для примитивов Котлин: Двойной Колон против Лямбды в подобном классе Должен ли я использовать класс данных, даже если я реализую все hashCode (), equals () и toString ()? Ошибка: выполнение выполнено для задачи ': app: compileDebugKotlin'. > Ошибка компиляции. Подробнее см. Журнал динамический dsl с использованием kotlin с поддержкой контента Android – Невозможно добавить банку, созданную в java8 с kotlin Превознесение Клейсли в Котлине error: generics не поддерживаются в -source 1.3 при компиляции кода Java с Kotlin Статус состояния Vault для UNONSUMED / CONSUMED Вызов класса 'конструктор путем отражения с Котлином

Параметр аннотированного типа в Java для компилятора Kotlin

В Java у меня есть следующий метод:

public Optional<Foo> getFoo() { // always return some non-null value } 

В коде Котлина возвращаемый тип этого метода задается как Optional<Foo!>! , Используя аннотацию @Nonnull я могу разрезать это на Optional<Foo!> ( @Nonnull Только тип Foo больше не проверен нулем).

Есть ли способ аннотировать метод, чтобы заставить компилятор Kotlin корректно проверить возвращаемое значение?

Вы можете сделать это, аннотируя использование типа Foo с некоторыми аннотациями обнуления, которые понимает компилятор Kotlin . К сожалению, некоторые библиотеки аннотаций из списка не поддерживают аннотацию типа использования.

Я обнаружил, что @NotNull из org.jetbrains:annotations:15.0 (но не 13.0) имеет цель TYPE_USE , поэтому вы можете добавить библиотеку в качестве зависимости к вашему проекту и аннотировать использование типа:

 import org.jetbrains.annotations.NotNull; ... public @NotNull Optional<@NotNull Foo> getFoo() { // always return some non-null value } 

Тогда тип возврата будет рассматриваться как Optional<Foo> в Котлине.

Это, конечно же, можно сделать с любыми другими аннотациями нулевой вероятности из упомянутого выше списка, которые поддерживают цель TYPE_USE .