本文共 2761 字,大约阅读时间需要 9 分钟。
org.projectlombok lombok 1.18.8 true
常用的就@Data、@NoArgsConstructor、@AllArgsConstructor、@Slf4j(变量名是log)
生成set/get/toString/equals/hashCode/canEqual/无参构造器。详细参考**反编译研究**
用法有:* ToString(exclude="column") 排除column列所对应的元素【多字段用数组】* @ToString(of="column")只生成包含column列所对应的元素的参数的toString方法【多字段用数组】* 详细生成的toString有没有用StringBuilder,亦或仅使用+号相连,详细参考**反编译研究**。(对于JDK8,加号相连会被优化成StringBuilder)
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); }}
- 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方法 }}
该字段是static final 的,lombok不会生成set、get(可自行手动生成,仅可生成get)
如果不写字段,则表示用所有字段作为条件,如果写了,则使用指定的属性,如@EqualsAndHashCode(of={"name", "userEmail"})
则表示用这两个属性生成对应的equals和hashCode方法
作用:Set和Map的key判断是否重复就是看equals和hashCode,这就是使用这个注解的意义。
坑:但是不建议使用该注解。因为:
如果@EqualsAndHashCode中of的变量名写错,如写成`@EqualsAndHashCode(of={"name", "age2"})`,如果`age2`属性不存在,编译也不报错,观察生成的源码,age2字段丢失(相当于只写了name字段),这个问题 **相当隐蔽,若增删属性、修改属性名但忘记改注解,很容易埋下bug,建议还是不用该注解**
我们想知道使用了注解等价于什么。可以使用 IDEA的 Delombok
功能来查看。步骤如下
Refactor
,找到Delombok
(注意如果未使用注解将无此选项)转载地址:http://frbzz.baihongyu.com/