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

Koh*_*ert 7 java annotations jsr305

对文件@ParametersAreNonnullByDefault说,认为:

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

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

方法Java教程似乎和我一样.


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

鉴于此,我只能说@EverythingIsNonnullByDefault应该存在于某个地方.:)

Dav*_*ess 10

不,@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 {
}
Run Code Online (Sandbox Code Playgroud)


Joa*_*uer 3

我不明白为什么@ParametersAreNonnullByDefault应该应用于返回值。

  • @Psycho_Dad:**为什么要**?返回值*不是参数*。`@ParametersAreNonnullByDefault` 的文档(和名称!)明确指出它适用于*参数*。 (2认同)