我刚开始在@NotNull
Java 8中使用注释并获得一些意想不到的结果.
我有这样的方法:
public ListfindStuff(@NotNull List searchingList) { ... code here ... }
我写了一个JUnit测试,传递参数searchList的null值.我期待发生某种类型的错误,但它经历过,好像注释不在那里.这是预期的行为吗?根据我的理解,这是为了让您跳过编写样板空检查代码.
@NotNull应该做什么的解释将非常感激.
@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没有做任何事情.使用@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"); } }
要@NotNull
活跃起来,您需要龙目岛:
https://projectlombok.org/features/NonNull
import lombok.NonNull;
跟随:我应该使用哪个@NotNull Java注释?
SO @NotNull只是一个标签...如果你想验证它,那么你必须使用像hibernate验证器jsr 303这样的东西
ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory(); Validator validator = validatorFactory.getValidator(); Set> violations = validator.validate(searchingList);