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

met*_*ers 11 java annotations lombok

Lombok 提供了执行空检查并抛出 NPE(如果没有以不同方式配置)的注释 @NonNull

我不明白为什么我会使用该文档示例中所述的注释:

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();
  }
Run Code Online (Sandbox Code Playgroud)

无论如何都会抛出 NPE。此处使用注释 imo 的唯一原因是您是否希望异常与 NPE 不同。

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

mer*_*nst 8

编写诸如此类的类型注释有@NonNull多种用途。

  • 它是文档:它以比 Javadoc 文本更简洁和精确的方式将方法的契约传达给客户端。
  • 它启用运行时检查——也就是说,如果有错误的客户端误用你的方法,它可以保证你的程序崩溃并显示有用的错误消息(而不是做更糟糕的事情)。Lombok 会为您执行此操作,而无需强制程序员编写运行时检查。该引用的例子显示了两种方法可以做到这一点:有一个@NonNull注释或明确的程序员编写的检查。“Vanilla Java”版本要么有错别字(一个流浪@NonNull),要么在 Lombok 处理后显示代码。
  • 它启用编译时检查Checker Framework等工具可以保证代码在运行时不会崩溃。诸如NullAwayError ProneFindBugs 之类的工具是启发式错误查找器,它们会警告您有关 null 的一些误用,但不给您保证。

  • 如果可以告诉 lombok 默认情况下所有内容都是“NonNull”并且仅注释可为空的参数而不是反之亦然,那就太好了... (2认同)