Lombok使 同时使@Data和@Builder ,构建无参构造器报错!编译不通过。如下图:

Lombok使@Data可以成参构造和类所有属性的getter/setter法。可以简化我们代码的开发。(需要安装Lombok插件和引Lombok依赖)。
例如下的个实体类,引Lombok后,可以动成GET/SET法和参构造函数。

编译后的class为:可以看到不仅帮我们生成了get和set ,同时也有默认的无参构造器

那么怎么自动生成有参构造器呢?使用@Builder注解,将会帮助我们成全属性的构造法。

编译后的class为:可以看到 已经帮我们构建好了全属性的构造方法,但是如果值只引用@Builder注解是无法生成get和set的。

但是如果同时使@Data和@Builder的话,可以看出尽管成了GET/SET法,但是参构造法没有了,这显然是不能接受的,因为很多框架都会调参构造去创建对象。

编译后的class:

我们尝试在Tet1类,动添加参构造法。编译发现报错不通过:

Lombok同时使@Data和@Builder的时候,如果要成参构造,需要在代码动引注解@Tolerate,让Lombok在成类的时候,对指定的构造函数不感知。

Java的编译分为以下个阶段:
解析与填充符号表->注解处理->分析与字节码成->成进制class件。
Lombok 使的是 JDK 6 实现的 JSR 269: Pluggable Annotation Processing API (编译期的注解处理器),它是在编译期时把 Lombok 的注解代码,转换为常规的 Java 法实现注。
在编译期阶段,当 Java 源码被抽象成语法树 (AST) 之后,Lombok 会根据的注解处理器动态的修改AST,增加新的代码 (节点),在这切执之后,再通过分析成了最终的字节码 (.class) 件,这就是Lombok 的执原理。
可以借助注解处理器实现个简单的 Setter,我们的实现步骤是:
1.定义定义注解和注解处理器
先创建个 MySetter.java 定义个注解,代码如下:

再实现个定义的注解处理器,代码如下:



测试类如下:

2.对注解处理器进编译,随后使注解处理器对类进编译
先需要先对注解处理器进编译(javac -cp 于引第三jar包进编译)

然后使注解处理器对这个Person测试类进编译:
这时候再看成的Person.class,可以发现Setter法已经成了:


当然尽管测试类已经成Setter法,但是因为是在编译时期成的,因此我们在开发的时候是没法直接调Setter法的,因此Lombok提供了插件机制,便我们在开发的时候可以直接去调Lombok的特性。
到此这篇关于Lombok同时使@Data和@Builder踩坑总结的文章就介绍到这了,更多相关Lombok@Data和@Builder内容请搜索源码搜藏网以前的文章或继续浏览下面的相关文章希望大家以后多多支持源码搜藏网!
热门源码