documentation for @ParametersAreNonnullByDefault
说:
此注释可以应用于包,类或方法,以指示默认情况下该元素中的方法参数是非空的,除非......
我不认为方法的返回类型/值是它的参数。它只是其签名的一部分,所以这对我来说有点模棱两可。
Java tutorial for methods似乎和我一样。
正如Joachim Sauer answer在{{3}}的评论部分中指出的那样,名称@ParametersAreNonnullByDefault
(参数)应该清楚地告诉我此批注不适用于方法的返回类型/值。我是盲人! :)谢谢Joachim!
鉴于此,我只能说@EverythingIsNonnullByDefault
应该存在于其中。 :)
答案 0 :(得分:9)
不,@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 {
}
答案 1 :(得分:3)
我没有看到@ParametersAreNonnullByDefault
应该适用于返回值的原因。