【问题标题】:When to use @NotNull and @Nullable IntelliJ annotations?何时使用 @NotNull 和 @Nullable IntelliJ 注释?
【发布时间】:2018-10-03 15:32:08
【问题描述】:
我刚开始使用那些 IntelliJ IDEA Java 注释,但我不明白什么时候应该使用它们,尤其是因为 IDEA 能够在大多数情况下推断它们。
你们遵守某种规则吗?我不希望看到每个参数或字段都用它们注释,代码可能会变得一团糟。
我知道这可能被视为基于意见,但我仍然想阅读答案。
【问题讨论】:
-
IntelliJ documentation says : The @Nullable annotation helps you detect: 可能最终会成为(返回)空的东西,而 The @NotNull annotation is, actually, an explicit contract declaring that: 不会是空的。
标签:
java
intellij-idea
annotations
【解决方案1】:
@Nullable and @NotNull 注释用于指示 IDE 某些东西(参数、属性等)可以(或不能)是null。通过这种方式,它可以帮助您检测可能不正确的代码。
这不是“必须遵循”的规则,而是另一个工具,可帮助开发人员在使用 IDE 时编写更健壮且不易出错的代码。
如果你一个人编码,团队很小,你在一个小项目或任何类似的情况下工作......并且你觉得没有它很舒服,那么不要使用它,因为代码确实会变成有点冗长。这并不意味着这对之前的任何情况都没有用(它实际上也很有帮助)。
另一方面,如果您认为您需要一个额外的工具来帮助您针对不可为“空”的值检测可能失败的代码,或者,例如,您正在编写一个供第三方使用的 API,并且想要在代码块中使用这个注释而不是几个asserts...然后去吧。
这一切都是为了评估项目中的pros和cons,您可以在其中应用这些注释,并决定这是否能给您带来比它所能解决的“问题”更多的好处原因。
【解决方案2】:
@Nullable 注释可帮助您检测:
可以返回 null 的方法调用。变量(字段、局部变量、
和参数),可以是null。
@NotNull 注释实际上是一个显式契约
声明:
方法不应返回null 变量(字段、局部变量、
和参数)不能包含null 值。
例如,如果您创建一个参数具有 @NotNull 注释的方法,然后使用可能是 null 的参数调用此方法,IntelliJ IDEA 将突出显示该问题在飞行中。
使用@Nullable 只是为了声明您的变量或方法可以保存null 值。
【解决方案3】:
在公共 API 上使用这些注释可能最有用,因为 IntelliJ IDEA 无法自动推断它们。换句话说,与其他开发人员进行交流。所以公共接口中公共方法的参数和返回类型绝对是@Nullable/@NotNull注解的候选。