Применимо ли @ParametersAreNonnullByDefault к возвращаемым значениям метода? - PullRequest
7 голосов
/ 05 октября 2011

Документация для @ParametersAreNonnullByDefault гласит, что:

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

Я не считаю тип возвращаемого значения / значение метода параметром. Это только часть его подписи, так что это для меня несколько двусмысленно.

Учебное пособие по для методов похоже на меня.


Как указал Йоахим Зауэр для меня в разделе комментариев своего ответа , имя @ParametersAreNonnullByDefault ( параметры ) должно быть четко указано для мне, что эта аннотация не относится к типам / значениям возвращаемых методов. Я был слепым! :) Спасибо, Иоахим!

В свете этого я могу только сказать, что @EverythingIsNonnullByDefault должен существовать где-то. :)

Ответы [ 2 ]

9 голосов
/ 17 ноября 2012

Нет, @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 {
}
3 голосов
/ 05 октября 2011

Я не вижу причины, по которой @ParametersAreNonnullByDefault должно применяться к возвращаемым значениям.

...