我刚开始在@NotNullJava 8 中使用注释并得到了一些意想不到的结果。
@NotNull
我有这样的方法:
public List<Found> findStuff(@NotNull List<Searching> searchingList) { ... code here ... }
我编写了一个 JUnit 测试,传入参数 searchList 的空值。我期待会发生某种类型的错误,但它就像注释不存在一样。这是预期的行为吗?据我了解,这是为了让您跳过编写样板空检查代码。
非常感谢您解释@NotNull 应该做什么。
@Nullable 而@NotNull自己什么也不做。它们应该充当文档工具。
@Nullable
注释提醒您在以下@Nullable情况下引入 NPE 检查的必要性:
@NotNullAnnotation 实际上是一个明确的契约,声明如下:
例如,不要写:
/** * @param aX should not be null */ public void setX(final Object aX ) { // some code }
您可以使用:
public void setX(@NotNull final Object aX ) { // some code }
此外,@NotNull通常由ConstraintValidators检查(例如在 spring 和 hibernate 中)。
@NotNull注释本身不进行任何验证,因为注释定义不提供任何ConstraintValidator类型引用。
ConstraintValidator
有关更多信息,请参阅: