当前位置:  开发笔记 > 编程语言 > 正文

在方法参数中使用NotNull Annotation

如何解决《在方法参数中使用NotNullAnnotation》经验,为你挑选了4个好方法。

我刚开始在@NotNullJava 8中使用注释并获得一些意想不到的结果.

我有这样的方法:

public List findStuff(@NotNull List searchingList) {
    ... code here ...
}

我写了一个JUnit测试,传递参数searchList的null值.我期待发生某种类型的错误,但它经历过,好像注释不在那里.这是预期的行为吗?根据我的理解,这是为了让您跳过编写样板空检查代码.

@NotNull应该做什么的解释将非常感激.



1> justAnotherU..:

@Nullable并且@NotNull不做任何事情.它们应该充当文档工具.

@Nullable注释会提醒您的必要性,介绍了NPE检查时:

    调用可以返回null的方法.

    取消引用可以为null的变量(字段,局部变量,参数).

@NotNull注释是,实际上,声明如下明示合同:

    方法不应返回null.

    变量(如字段,局部变量和参数)不能保存空值.

例如,而不是写:

/**
 * @param aX should not be null
 */
public void setX(final Object aX ) {
    // some code
}

您可以使用:

public void setX(@NotNull final Object aX ) {
    // some code
}


我相信混淆来自NotNull注释的java文档:`*带注释的元素不能是{@code null}.*接受任何类型.我认为**必须**字应替换为**应该**但同样取决于你如何阅读它.肯定会有一些更好的澄清
因此,仅为了澄清NotNull部分的第2部分,实际上它应该说“应该”,而不是“不能”,因为它不能强制执行?或者,如果可以在运行时实施它,您将如何处理?

2> 小智..:

如上所述@NotNull没有做任何事情.使用@NotNull的好方法是将它与Objects.requireNonNull一起使用

public class Foo {
    private final Bar bar;

    public Foo(@NotNull Bar bar) {
        this.bar = Objects.requireNonNull(bar, "bar must not be null");
    }
}


只是一个小费。您也可以用一行写这样的分配:```this.bar = Objects.requireNonNull(bar,“ bar不能为null”);```

3> gavenkoa..:

@NotNull活跃起来,您需要龙目岛:

https://projectlombok.org/features/NonNull

import lombok.NonNull;

跟随:我应该使用哪个@NotNull Java注释?



4> Naruto..:

SO @NotNull只是一个标签...如果你想验证它,那么你必须使用像hibernate验证器jsr 303这样的东西

ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
Validator validator = validatorFactory.getValidator();
 Set> violations = validator.validate(searchingList);

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有