Lombok 的@NonNull 注释是否允许默认构造函数提供空值?
Is @NonNull annotation of Lombok allows the default constructor to give null values?
我有一个class说C
class C {
@NonNull
private String str;
//getters
//setters
}
现在我做了这样的事情:
C ob = new C();
System.out.println(ob.getStr());
令我惊讶的是它打印了 null。
但是,当我这样做时,它给出了空指针异常:
ob.setStr(null)
@NonNull
不支持默认构造函数吗?请解释。
请阅读the documentation...
Lombok has always treated any annotation named @NonNull on a field as
a signal to generate a null-check if lombok generates an entire method
or constructor for you, via for example @Data.
您使用的是默认构造函数,因此 Lombok 不会为您生成构造函数,因此没有空值检查。
如果它如您所愿,您的每个默认构造对象 class:
C ob = new C();
会立即导致空指针异常。不是很有用。
Does @NonNull does not hold on default constructors?
确实不,它没有,我不明白它怎么可能。当编译器提供默认构造函数时,会在编译期间发生,在 注释处理之后。
此外,Lombok's own docs 关于注释与字段的使用有以下说法:
Lombok has always treated any annotation named @NonNull
on a field as
a signal to generate a null-check if lombok generates an entire method
or constructor for you, via for example @Data. Now, however, using
lombok's own @lombok.NonNull
on a parameter results in the insertion
of just the null-check statement inside your own method or
constructor.
也就是说,注解仅对您自己的构造函数和方法(即源代码中存在的构造函数和方法)以及 Lombok 为您生成的构造函数和方法有效。编译器提供的默认构造函数两者都不是。
我有一个class说C
class C {
@NonNull
private String str;
//getters
//setters
}
现在我做了这样的事情:
C ob = new C();
System.out.println(ob.getStr());
令我惊讶的是它打印了 null。
但是,当我这样做时,它给出了空指针异常:
ob.setStr(null)
@NonNull
不支持默认构造函数吗?请解释。
请阅读the documentation...
Lombok has always treated any annotation named @NonNull on a field as a signal to generate a null-check if lombok generates an entire method or constructor for you, via for example @Data.
您使用的是默认构造函数,因此 Lombok 不会为您生成构造函数,因此没有空值检查。
如果它如您所愿,您的每个默认构造对象 class:
C ob = new C();
会立即导致空指针异常。不是很有用。
Does @NonNull does not hold on default constructors?
确实不,它没有,我不明白它怎么可能。当编译器提供默认构造函数时,会在编译期间发生,在 注释处理之后。
此外,Lombok's own docs 关于注释与字段的使用有以下说法:
Lombok has always treated any annotation named
@NonNull
on a field as a signal to generate a null-check if lombok generates an entire method or constructor for you, via for example @Data. Now, however, using lombok's own@lombok.NonNull
on a parameter results in the insertion of just the null-check statement inside your own method or constructor.
也就是说,注解仅对您自己的构造函数和方法(即源代码中存在的构造函数和方法)以及 Lombok 为您生成的构造函数和方法有效。编译器提供的默认构造函数两者都不是。