java - 为什么我要使用 Lombok-Annotation @NonNull?

标签 java annotations lombok

Lombok 提供 annotation @NonNull 执行 nullcheck 并抛出 NPE(如果没有进行不同配置)。

我不明白为什么我要使用 example 中所述的注释。该文档的内容:

private String name;
public NonNullExample(@NonNull Person person) {
    super("Hello");
    if (person == null) {
      throw new NullPointerException("person is marked @NonNull but is null");
    }
    this.name = person.getName();
  }

无论如何,NPE 都会被抛出。在我看来,这里使用注释的唯一原因是您希望异常与 NPE 不同。

编辑:我确实知道异常会被显式抛出并因此“受控”,但至少错误消息的文本应该是可编辑的,不是吗?

最佳答案

编写类型注释(例如 @NonNull)有多种用途。

  • 它是文档:它以比 Javadoc 文本更简洁、更精确的方式向客户端传达方法的契约。
  • 它支持运行时检查——也就是说,如果有问题的客户端误用了您的方法,它可以保证您的程序崩溃并显示有用的错误消息(而不是做更糟糕的事情)。 Lombok 会为您完成此操作,而无需强制程序员编写运行时检查。 referenced example显示了执行此操作的两种方法:使用单个 @NonNull 注释或使用显式程序员编写的检查。 “Vanilla Java”版本要么有拼写错误(杂散的 @NonNull),要么在 Lombok 处理后显示代码。
  • 它启用编译时检查。诸如Checker Framework之类的工具保证代码在运行时不会崩溃。工具如NullAway , Error Prone ,和FindBugs是启发式错误发现程序,会警告您有关 null 的某些误用,但不向您提供保证。

关于java - 为什么我要使用 Lombok-Annotation @NonNull?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56735134/

相关文章:

java - 如何告诉 Hibernate 在 CRUD 操作中有条件地忽略列

java - Lombok Builders 使用反射吗?

java - Lombok 不适用于 Eclipse Neon

java - 如何正确使用 Lombok @Data 和接口(interface)

java.lang.NoClassDefFoundError : org/apache/commons/vfs/FileSelector 错误

java - 为什么字符串中有逗号时 JSON 无效?

annotations - Annotation 中的多个验证选项

java - 如何使用 Hibernate Annotations 在 Pojo 类和抽象类之间建立关系连接

java Kafka生产者错误

java - maven 和 spring 应用程序部署错误 : Unable to locate NamespaceHandler for namespace [http://www. springframework.org/schema/context]