Применимо ли @ParametersAreNonnullByDefault к возвращаемым значениям метода?
Документация для@ParametersAreNonnullByDefault
Говорит, что:
Эту аннотацию можно применить к пакету, классу или методу, чтобы указать, что параметры метода в этом элементе по умолчанию не равны нулю, если только...
Я не считаю тип возвращаемого значения / значение метода параметром. Это только часть его подписи, так что это для меня несколько двусмысленно.
Учебник по Java для методов, кажется, думает как я.
Как отметил для меня Joachim Sauer в разделе комментариев своего ответа, имя @ParametersAreNonnullByDefault
(параметры) должны были четко указать мне, что эта аннотация не применяется к типам / значениям возвращаемых методов. Я был слепым!:) Спасибо, Иоахим!
В свете этого я могу только сказать, что @EverythingIsNonnullByDefault
должен существовать где-то.:)
2 ответа
Я не вижу причины, почему @ParametersAreNonnullByDefault
должен применяться к возвращаемым значениям.
Нет, @ParametersAreNonnullByDefault
применяется только к параметрам метода - значениям, которые он принимает от вызывающей стороны (в скобках). Метод все еще может вернуть null
значение.
Вот класс, который объединяет все три места, где вы можете подать заявку @Nonnull
хотя в нашем коде я все еще использую три отдельных аннотации, одна из которых предоставляется JSR-305.
package com.sample;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import javax.annotation.meta.TypeQualifierDefault;
/**
* This annotation can be applied to a package, class or method to indicate that all
* class fields and method parameters and return values in that element are nonnull
* by default unless overridden.
*/
@Documented
@Nonnull
@TypeQualifierDefault({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface EverythingIsNonnullByDefault {
}