@NotNull javax annotation vs Intellij @NotNull注释

时间:2017-08-05 22:46:23

标签: java intellij-idea annotations

我应该使用以下哪些注释? INTELLIJ引入了带注释的自有库。我读到用这些注释标记方法参数和类attrbiutes很好,但我不知道它们是做什么的。有许多带注释的库(spring也有注释如Nullable)。 Javax注释由hibernate验证器实现,验证特定类,但INTELLIJ注释仅对方法属性进行重新提醒或警告。假设我有Intellij注释课程

public class XYZ{
@NotNull
private int id;
@Nullable
private String z;
@NotNull
private String y;

} 和

public void method(@NotNull String a,String b)
{
...
}

在运行时期间所有注释都被取消,如果@NotNull参数为null,Intellij会怎么做?它不会抛出任何错误或类似的东西,只会警告我,为什么它对我有用?我认为对于尝试阅读我的代码的人来说可能更有用。

另一个例子,当我在我的用户中有ManyToMany关系时,我应该将其标记为@Nullable吗?当我创建新用户时,每次都是null,所以它不是必需的,是吗?

1 个答案:

答案 0 :(得分:5)

我相信你在混合东西:

  1. intellij注释可帮助开发人员发现可能的错误。例如,如果您说参数为Nullable,则会在您不保护代码免受NullPointerExceptions攻击时发出警告。这可以在编译时完成(与运行时无关)。
  2. javax验证注释,是关于向字段添加验证,如果不满足则抛出错误。 是关于您的业务,而不是代码中的错误;可能没有任何错误。例如,它们可用于验证外部输入是否与特定条件匹配。假设您在应用程序中实现了一个从外部调用的API。如果将NotNull注释添加到字段,如果API调用者未设置该字段,则会收到错误。你的应用程序非常好,没有任何错误。显然,这些验证是关于数据的,并且是在运行时完成的。