Применимо ли @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 {
}
Другие вопросы по тегам