温馨提示:本文翻译自stackoverflow.com,查看原文请点击:java - Why would I use Lombok-Annotation @NonNull?
java annotations lombok

java - 为什么要使用Lombok注释@NonNull?

发布于 2020-03-29 21:52:01

Lombok提供了注释 @NonNull注释将执行nullcheck并引发NPE(如果配置不同)。

我不明白为什么要按照该文档示例中的说明使用该注释

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仍然会被抛出。使用注释imo的唯一原因是,您是否希望异常与NPE不同。

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

查看更多

提问者
metters
被浏览
54
mernst 2019-06-25 00:00

编写诸如这样的类型注释有@NonNull几个目的。

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