我刚开始在@NotNull
Java 8中使用注释并获得一些意想不到的结果.
我有这样的方法:
public List<Found> findStuff(@NotNull List<Searching> searchingList) {
... code here ...
}
Run Code Online (Sandbox Code Playgroud)
我写了一个JUnit测试,传递参数searchList的null值.我期待发生某种类型的错误,但它经历过,好像注释不在那里.这是预期的行为吗?根据我的理解,这是为了让您跳过编写样板空检查代码.
@NotNull应该做什么的解释将非常感激.
jus*_*... 145
@Nullable
并且@NotNull
不做任何事情.它们应该充当文档工具.
该@Nullable
注释会提醒您的必要性,介绍了NPE检查时:
该@NotNull
注释是,实际上,声明如下明示合同:
例如,而不是写:
/**
* @param aX should not be null
*/
public void setX(final Object aX ) {
// some code
}
Run Code Online (Sandbox Code Playgroud)
您可以使用:
public void setX(@NotNull final Object aX ) {
// some code
}
Run Code Online (Sandbox Code Playgroud)
小智 21
如上所述@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");
}
}
Run Code Online (Sandbox Code Playgroud)
要@NotNull
活跃起来,您需要龙目岛:
https://projectlombok.org/features/NonNull
import lombok.NonNull;
Run Code Online (Sandbox Code Playgroud)
SO @NotNull只是一个标签...如果你想验证它,那么你必须使用像hibernate验证器jsr 303这样的东西
ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
Validator validator = validatorFactory.getValidator();
Set<ConstraintViolation<List<Searching>> violations = validator.validate(searchingList);
Run Code Online (Sandbox Code Playgroud)
如果您使用的是 Spring,则可以通过使用以下内容注释类来强制验证@Validated
:
import org.springframework.validation.annotation.Validated;
Run Code Online (Sandbox Code Playgroud)
此处提供更多信息: Javax @NotNull 注释用法
你也可以使用@NonNull
from projectlombok
(lombok.NonNull)
归档时间: |
|
查看次数: |
114098 次 |
最近记录: |