Параметр аннотированного типа в 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 .

Intereting Posts
Проблема с расширением метода в скрипте Котлин Какой законный способ получить аннотации к чистому качеству Котлина через отражение, они всегда отсутствуют? Оператор, новый в Kotlin (синтаксис) обрабатывать объект, который может возвращать значение null в kotlin Возвращаемое значение для переменной, которая, по-видимому, может быть нулевой, но на самом деле не может Kotlin генерирует общий код Java Каков наилучший способ объявить компонент UI в Android с Kotlin? Какое правильное место для запуска службы в архитектуре MVVM Android Как я могу сделать разрыв строки (продолжение строки) в Котлине Заменить java-общий интерфейс в Kotlin для привязки данных Как преобразовать символ в значение ascii на языке kotlin Kotlin – Фабричный класс со свойствами Где сохранить точки Android GPS (широта, долгота)? Связывание представления с изменяющимся свойством контроллера общие интерфейсы с методами reified