【发布时间】:2019-11-06 04:13:11
【问题描述】:
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 无论如何都会被抛出。这里使用注解 imo 的唯一原因是您希望异常不同于 NPE。
编辑:我知道异常会被显式抛出并因此被“控制”,但至少错误消息的文本应该是可编辑的,不是吗?
【问题讨论】:
-
考虑一个例子。您正在设计 api,字段标记为
@NonNull。当 corresponding json 命中后端 api 时,它会在控制器级别抛出 NPE 而不是通过代码,这也称为fail-fast和其他事情取决于使用案例 -
我认为该示例旨在显示如果您对
@NonNull注释进行编码(因此是 Vanilla Java 标题),则生成的代码. -
看来你是对的。我以为他们是一样的
-
@Sasha lombok 总是剥离它们,
@NonNull除外。原因是:nonnull 是唯一用于文档/lint-tool 目的的。所有其他 lombok 注释都没有,因此可以在 lombok 完成后删除。
标签: java annotations lombok