為什么有些公司不讓用 Lombok ?
閱讀本文大概需要 5.6 分鐘。
來自:ramostear.com/blog/2020/04/28/uk1860p8.html
愛的開始,恨的起源
public?class?MyObject{
????private?Long id;
????private?String name;
????private?int?age;
????private?int?gender;
????public?Long?getId(){
????????return?id;
????}
????public?void?setId(Long id){
????????this.id = id;
????}
????public?String?getName(){
????????return?name;
????}
????public?void?setName(String name){
????????this.name = name;
????}
????public?int?getAge(){
????????return?age;
????}
????public?void?setAge(int?age){
????????this.age = age;
????}
????public?int?getGender(){
????????return?gender;
????}
????public?void?setGender(int?gender){
????????this.gender = gender;
????}
????@Override
????public?boolean?equals(Object o){
????????if(this?== o){
????????????return?true;
????????}
????????if(o ==?null?|| getClass() != o.getClass()){
????????????return?false;
????????}
????????MyObject obj = (MyObject) o;
????????return?age = obj.age &&
????????????gender = obj.gender &&
????????????Objects.equals(id,obj.id) &&
????????????Objects.queals(name,obj.name);
????}
????@Override
????public?int?hashCode(){
????????return?Objects.hash(id,name,age,gender);
????}
????@Override
????public?String?toString(){
????????return?"MyObject{"+
????????????"id="+id+
????????????"name="+name+
????????????"age="+age+
????????????"gender="+gander+
????????????"}";
????}
}
@Getter
@Setter
public?class?MyObject{
????private?Long id;
????private?String name;
????private?int?age;
????private?int?gender;
????@Override
????public?boolean?equals(Object o){
????????if(this?== o){
????????????return?true;
????????}
????????if(o ==?null?|| getClass() != o.getClass()){
????????????return?false;
????????}
????????MyObject obj = (MyObject) o;
????????return?age = obj.age &&
????????????gender = obj.gender &&
????????????Objects.equals(id,obj.id) &&
????????????Objects.queals(name,obj.name);
????}
????@Override
????public?int?hashCode(){
????????return?Objects.hash(id,name,age,gender);
????}
????@Override
????public?String?toString(){
????????return?"MyObject{"+
????????????"id="+id+
????????????"name="+name+
????????????"age="+age+
????????????"gender="+gander+
????????????"}";
????}
}
@Getter
@Setter
@EqualsAndHashCode
public?class?MyObject{
????private?Long id;
????private?String name;
????private?int?age;
????private?int?gender;
????@Override
????public?String?toString(){
????????return?"MyObject{"+
????????????"id="+id+
????????????"name="+name+
????????????"age="+age+
????????????"gender="+gander+
????????????"}";
????}
}
@Data
public?class?MyObject{
????private?Long id;
????private?String name;
????private?int?age;
????private?int?gender;
}
扭曲的審美,愛的隱患
1. JDK 版本問題
于是我不得不將所有的 Lombok 注解從項(xiàng)目源代碼中清除,并使用 IDE 自帶的功能生成 getter/setter,equals,hashCode,toString 以及構(gòu)造器等方法,你也可以使用 Delombok 工具完成這一過程。但這終究會(huì)消耗你很多的時(shí)間。
2. 脅迫使用
3. 可讀性差
4. 代碼耦合度增加
雖然 Lombok 的依賴包并不大,但就因?yàn)槠渲幸粋€(gè)地方使用了 Lombok,其余所有的依賴方都要強(qiáng)制加入 Lombok 的 Jar 包,這是一種入侵式的耦合,如果再遇上 JDK 版本問題,這將是一場災(zāi)難。
5. 得不償失

總 結(jié)
推薦閱讀:
GitHub上最勵(lì)志的計(jì)算機(jī)自學(xué)教程
微信掃描二維碼,關(guān)注我的公眾號
朕已閱?
評論
圖片
表情

