@ParametersAreNonnullByDefault是否也适用于方法返回值?

@ParametersAreNonnullByDefault的文档说:

此注释可以应用于包,类或方法,以指示默认情况下该元素中的方法参数是非空的,除非…

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

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


正如Joachim Sauer在他的回答的评论部分中为我指出的那样,名称@ParametersAreNonnullByDefault参数 )应该清楚地表明这个注释不适用于方法的返回类型/值。 我是盲人! :)谢谢Joachim!

鉴于此,我只能说@EverythingIsNonnullByDefault应该存在于其中。 🙂

我没有看到@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 { }