Как я могу применить аннотацию @Nonnull ко всему, включая использование типа и параметры типа? - PullRequest
1 голос
/ 26 апреля 2019

Я бы хотел сказать IntelliJ, что по умолчанию все не должно быть нулевым, если только явно не указано @Nullable.

Используя библиотеку JSR305 и приведенный ниже код, мы можем частично выполнить это.

import javax.annotation.Nonnull;
import javax.annotation.meta.TypeQualifierDefault;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Nonnull
@TypeQualifierDefault({ElementType.FIELD, ElementType.LOCAL_VARIABLE, ElementType.METHOD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@interface NonnullByDefault {
}

(см. Также: https://www.jetbrains.com/help/idea/parametersarenonnullbydefault-annotation.html)

Однако, в настоящее время @Nonnull из JSR305 не поддерживается TYPE_USE и TYPE_PARAMETERS, что не допускает объявлений вроде var list = new ArrayList<@Nonnull String>();. Это выдает ошибку: '@ Nonnull' не применимо к использованию типа .

Таким образом, приведенная выше аннотация @NonnullByDefault не работает для использования типа и параметров типа, даже если я включаю их в TypeQualifierDefault. Есть ли способ сделать их ненулевыми без явных аннотаций?

1 Ответ

0 голосов
/ 30 апреля 2019

Как указано в этом комментарии пользователя mernst, использование javax.annotation.Nonnull, вероятно, не лучший выбор.

Кроме того, я боюсь, что ответ заключается в том, что IntelliJ не разрешает ту проверку, которую вы намереваетесь использовать.

Таким образом, на данный момент наиболее перспективным вариантом будет использование упомянутой checkerframework .

...