文章目录
- 1、Lombok简介
- 2、使用Lombok的问题
- 2.1 驼峰问题
- 2.2 相同的字符串不同的大小写
- 3、关于使用Lombok的总结
- 4、写在最后
1、Lombok简介
Lombok
项目是一个Java库,它会自动插入您的编辑器和构建工具中,从而为你优化Java代码。通过注解的方式代替我们手动生成getter
、setter
、toString
等方法。
虽然现在的IDE可以帮我们自动生成,但是整个类显的很臃肿。尤其类的属性太多时,查看属性非常不方便。使用Lombok
可以使我们的代码更加简洁,可以说是程序员的福音。
官网地址:https://projectlombok.org/
2、使用Lombok的问题
使用
Lombok
一时爽,但是需要一些问题之后,如果不了解细节,查找原因难上加难,这可能也是一些公司不建议使用Lombok
的原因。下面总结了一下遇到的几个问题。
2.1 驼峰问题
先来看一下一个案例:
public class Book {
private String uName;
}
先来看看IDE和JDK帮我们生成的getter
、setter
方法:
public class Book {
private String uName;
public String getuName() {
return uName;
}
public void setuName(String uName) {
this.uName = uName;
}
}
生成
getter
,setter
方法的语法是是这样的:getXxxx,setXxx
但是当遇到案例的属性,就会特殊处理成getxxx
、setxxx
与之类似属性还有如下:
public class Book {
private String uName;
private String AName;
private boolean isEmpty;
private boolean iseasy;
private boolean aBoolean;
private boolean BBoolean;
public String getuName() {
return uName;
}
public void setuName(String uName) {
this.uName = uName;
}
public String getAName() {
return AName;
}
public void setAName(String AName) {
this.AName = AName;
}
public boolean isEmpty() {
return isEmpty;
}
public void setEmpty(boolean empty) {
isEmpty = empty;
}
public boolean isIseasy() {
return iseasy;
}
public void setIseasy(boolean iseasy) {
this.iseasy = iseasy;
}
public boolean isaBoolean() {
return aBoolean;
}
public void setaBoolean(boolean aBoolean) {
this.aBoolean = aBoolean;
}
public boolean isBBoolean() {
return BBoolean;
}
public void setBBoolean(boolean BBoolean) {
this.BBoolean = BBoolean;
}
}
小结:
String uName,AName
的getter
、setter
会沿用类的属性即不会大小写的转化:getuName
,setAName
。boolean isEmpty
的getter
就是方法本身,setter
方法会去除is
:setEmpty
boolean iseasy
的getter
方法:isIseasy
,settter
方法为:setIseasy
boolean aBoolean,BBoolean
的getter
方法均是isxxxx
,setter
方法均为setxxxx
。其他boolean属性的getter
方法均是isXxx
,setter
方法均为setXxx
再来看看Lombok
为我们生成的方法:
public class Book {
private String uName;
private String AName;
private boolean isEmpty;
private boolean iseasy;
private boolean aBoolean;
private boolean BBoolean;
public Book() {
}
public String getUName() {
return this.uName;
}
public String getAName() {
return this.AName;
}
public boolean isEmpty() {
return this.isEmpty;
}
public boolean isIseasy() {
return this.iseasy;
}
public boolean isABoolean() {
return this.aBoolean;
}
public boolean isBBoolean() {
return this.BBoolean;
}
public void setUName(final String uName) {
this.uName = uName;
}
public void setAName(final String AName) {
this.AName = AName;
}
public void setEmpty(final boolean isEmpty) {
this.isEmpty = isEmpty;
}
public void setIseasy(final boolean iseasy) {
this.iseasy = iseasy;
}
public void setABoolean(final boolean aBoolean) {
this.aBoolean = aBoolean;
}
public void setBBoolean(final boolean BBoolean) {
this.BBoolean = BBoolean;
}
}
看看其中和上面IDE生成的不一致的字段:
boolean aBoolean
;String uName
。
lombok
会将我们的小写转化成大写。
这样造成的问题可能会导致调用set方法是赋值失效,因为我们数据通过反射调用setter
方法赋值的时候,都会按照我们IDE的这种规则。
解决方案:增加lombk.config的配置
- 在src/main/java下增加
lombk.config
的文件(注:不是resources下哦) - 文件内容增加配置信息:
lombok.accessors.capitalization=beanspec
2.2 相同的字符串不同的大小写
先看一个案例:IDE生成
public class Book {
private String uName;
private String uname;
private String unamE;
public String getuName() {
return uName;
}
public void setuName(String uName) {
this.uName = uName;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getUnamE() {
return unamE;
}
public void setUnamE(String unamE) {
this.unamE = unamE;
}
}
再来看看lombok
的生成:
public class Book {
private String uName;
private String uname;
private String unamE;
public String getUName() {
return this.uName;
}
public void setUName(final String uName) {
this.uName = uName;
}
}
lombok
会这把这三个属性识别成一个属性。这种lombok
不提供解决方案,作者认为这是不规范的操作。官方icuess如下:
https://github.com/projectlombok/lombok/issues/2130
大意如下:这种修改维护的成本比较高,也会带来额外的开销。该项目只有几个贡献者和2个维护者。这种情况也并不常见,不知道花费大量的时间取支持。
3、关于使用Lombok的总结
因为种种原因有人抵触它,有人喜欢它,这就仁者见仁智者见智了。
撇开Lombok
的问题,我们首先需要做的就是规范自己的编码风格,尽量不要使用类似、相近单词命名。这样也会为我们自己阅读代码带来了障碍。
所以良好的代码规范会为我们带来很多好处,无论使用什么样的工具或者类库。对于一些特别的字段处理上很有可能会出现不一致的地方,只要我们规范了代码,使用那种工具都不会带来显而易见的异常。大家可以根据自己的习惯或者团队的习惯合理的选择三方库
4、写在最后
本文只分享的遇到的两个问题,如果遇到其他问题可以是在issues
中寻找,查看解决方案。
关于lombok的使用,需要的朋友可以参考这篇博文
https://blog.vicat.top/archives/%E7%94%A8lombok%E8%AE%A9java%E6%9B%B4%E7%AE%80%E6%B4%81#%E4%B8%80-%E6%A6%82%E8%BF%B0