
lombok 基于JSR 269 (可插拔注释)规范,通过修改语法树(AST)供javac在编译时使用。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>**特别提醒:**lombok 的注解包括但不限于如下这些,同时并不意味着所有可用的注解均无使用风险,lombok应根据软件开发环境决定,对一些不稳定的应尽量少用,或者不用。
ElementType.TYPE
生成一个all args构造函数。all args构造函数要求类中的每个字段都有一个参数。 完整的文档可以在@Constructor的项目lombok功能页面上找到。 即使未列出该注释,该注释也具有onConstructor参数。有关更多详细信息,请参阅完整文档。 另见:NoArgsConstructor,RequiredArgsConstructor
新增/删减属性时影响编译结果,可能造成代码不稳定
ElementType.TYPE, ElementType.METHOD, ElementType.CONSTRUCTOR
生成器注释为被注释的类或包含用@builder注释的成员的类创建所谓的“生成器”方面。 如果对成员进行了注释,则该成员必须是构造函数或方法。如果对一个类进行了注释,则会生成一个包专用构造函数,其中所有字段都是参数(就像类中存在@AllArgsConstructor(access=AccessLevel.package)),就好像这个构造函数是用@Builder注释的。请注意,仅当您没有编写任何构造函数,也没有添加任何显式@xargsconstuctor注释时,才会生成此构造函数。在这些情况下,lombok将假定存在一个all args构造函数,并生成使用它的代码;这意味着如果这个构造函数不存在,就会出现编译器错误。 @Builder的作用是生成一个名为TBuilder的内部类,其中包含一个私有构造函数。TBuilder的实例是使用名为builder()的方法生成的,该方法也是在类本身(而不是在builder类中)中为您生成的。 TBuilder类为带注释的构造函数/方法(在注释类时,每个字段)的每个参数包含一个方法,该方法返回生成器本身。生成器还有一个build()方法,该方法返回原始类型的完整实例,该实例是通过生成器中的各种其他方法将设置好的所有参数传递给用@builder注释的构造函数或方法而创建的。此方法的返回类型将与相关类相同,除非对某个方法进行了注释,在这种情况下,它将等于该方法的返回类型。 完整的文档可以在@Builder的project lombok功能页面上找到。
@Builder
class Example<T> {
private T foo;
private final String bar;
}class Example<T> {
private T foo;
private final String bar;
private Example(T foo, String bar) {
this.foo = foo;
this.bar = bar;
}
public static <T> ExampleBuilder<T> builder() {
return new ExampleBuilder<T>();
}
public static class ExampleBuilder<T> {
private T foo;
private String bar;
private ExampleBuilder() {