8

文档@ParametersAreNonnullByDefault说:

此注解可应用于包、类或方法,以指示该元素中的方法参数默认为非空,除非...

我不认为方法的返回类型/值是它的参数。它只是其签名的一部分,所以这对我来说有点模棱两可。

方法的Java 教程似乎和我一样思考。


正如Joachim Sauer在他的回答的评论部分中为我指出的那样,名称@ParametersAreNonnullByDefault参数)应该已经清楚地向我表明该注释不适用于方法的返回类型/值。我瞎了!:) 谢谢约阿希姆!

鉴于此,我只能说一个@EverythingIsNonnullByDefault应该存在于某处。:)

4

2 回答 2

12

不,@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 {
}
于 2012-11-17T08:52:13.103 回答
3

我看不出为什么@ParametersAreNonnullByDefault应该应用于返回值。

于 2011-10-05T08:05:55.637 回答