博客
关于我
最简单的Lombok教程及其原理
阅读量:389 次
发布时间:2019-03-05

本文共 2761 字,大约阅读时间需要 9 分钟。

使用Lombok

一、如何使用 Lombok

  • 首先IDE必须安装插件才能支持 lombok。插件安装教程自行搜索
  • Maven 项目引入依赖,请自行依赖最新版本(也可以不指定版本,继承spring)
org.projectlombok
lombok
1.18.8
true

二、常用注解

常用注解

常用的就@Data、@NoArgsConstructor、@AllArgsConstructor、@Slf4j(变量名是log)

注解分析
  • @Data
生成set/get/toString/equals/hashCode/canEqual/无参构造器。详细参考**反编译研究**
  • @Setter
  • @Getter
  • @ToString
用法有:* ToString(exclude="column") 排除column列所对应的元素【多字段用数组】* @ToString(of="column")只生成包含column列所对应的元素的参数的toString方法【多字段用数组】* 详细生成的toString有没有用StringBuilder,亦或仅使用+号相连,详细参考**反编译研究**。(对于JDK8,加号相连会被优化成StringBuilder)
  • @NoArgsConstructor
  • @AllArgsConstructor
  • @EqualsAndHashCode
  • @Slf4j
  • @Log4j
  • @Log4j2
  • @Builder:不能直接new对象,必须使用builder模式

三、使用的细节

1、自己写的set/get/toString等可以覆盖注解生成的方法

package com.example.boothelloworld2.zzzother;import lombok.Data;/** * 测试自己写的set、get、toString是否会覆盖lombok生成的。 * 结论:会的! */@Datapublic class TestLombok01 {       private String name;    public String getName() {           System.out.println("自己写的get方法会覆盖lombok生成的吗?会");        return name;    }    public void setName(String name) {           System.out.println("自己写的set方法会覆盖lombok生成的吗?会");        this.name = name;    }    @Override    public String toString() {           return "覆盖注解生成的的toString方法";    }    public static void main(String[] args) {           TestLombok01 t = new TestLombok01();        t.setName("stone");        t.getName();        System.out.println(t);    }}

2、关于static/final/static final

  • static方法不生成set、get
  • final变量无set,有get方法
  • static final方法不生成set、get方法
package com.example.boothelloworld2.zzz_other;import lombok.Data;/** * 测试satic、final和static final的变量的set、get情况 * * 结论:static方法不生成set、get;final变量无set有get方法,static final方法不生成set、get方法 */@Datapublic class TestLombok03 {       private static String staticVar;    private final String FINAL_VAR = "FINAL_VAR_VALUE";    private static final String STATIC_FINAL_VAR = "STATIC_FINAL_VAR_VALUE";    public static void main(String[] args) {           TestLombok03 t = new TestLombok03();//        t.getFINAL_VAR(); // 存在//        t.setFINAL_VAR();// final变量无set方法//         static变量不生成set、get方法        // static final变量也不生成set、get方法    }}

3、关于serialVersionUID

该字段是static final 的,lombok不会生成set、get(可自行手动生成,仅可生成get)

4、关于@EqualsAndHashCode

如果不写字段,则表示用所有字段作为条件,如果写了,则使用指定的属性,如@EqualsAndHashCode(of={"name", "userEmail"})则表示用这两个属性生成对应的equals和hashCode方法

作用:Set和Map的key判断是否重复就是看equals和hashCode,这就是使用这个注解的意义

坑:但是不建议使用该注解。因为:

如果@EqualsAndHashCode中of的变量名写错,如写成`@EqualsAndHashCode(of={"name", "age2"})`,如果`age2`属性不存在,编译也不报错,观察生成的源码,age2字段丢失(相当于只写了name字段),这个问题 **相当隐蔽,若增删属性、修改属性名但忘记改注解,很容易埋下bug,建议还是不用该注解**

四、反编译

我们想知道使用了注解等价于什么。可以使用 IDEA的 Delombok功能来查看。步骤如下

  1. 选择文件,右键,选择Refactor,找到Delombok(注意如果未使用注解将无此选项)
  2. 选择需要delombok的注解,也可以选所有
  3. 这样注解就还原成原始的模样,这样就可以清晰知道注解的作用

转载地址:http://frbzz.baihongyu.com/

你可能感兴趣的文章
vuex modules
查看>>
sleep、wait、yield、join——简介
查看>>
web项目配置
查看>>
基于单片机简易信号误差分析设计-全套资料
查看>>
基于单片机简易脉搏测量仪系统设计-毕设课设资料
查看>>
Javascript中String支持使用正则表达式的四种方法
查看>>
eclipse引用sun.misc开头的类
查看>>
Servlet2.5的增删改查功能分析与实现------删除功能(四)
查看>>
spring启动错误:Could not resolve placeholder
查看>>
查询某表格上次进行vacuum的时间
查看>>
invalid byte sequence for encoding
查看>>
redis向数组中添加值并查看数组长度
查看>>
JS编写一个函数,计算三个不同数字的大小,按从小到大顺序打印(穷举法)
查看>>
技术美术面试问题整理
查看>>
C++学习记录 五、C++提高编程(2)
查看>>
VUE3(八)setup与ref函数
查看>>
智能合约开发实践(1)
查看>>
CMake自学记录,看完保证你知道CMake怎么玩!!!
查看>>
ORB-SLAM2:LoopClosing线程学习随笔【李哈哈:看看总有收获篇】
查看>>
Codeforces Round #305 (Div. 1) B. Mike and Feet(单调栈)
查看>>