加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

Lombok!代码简洁极品还是代码亚健康元凶?

发布时间:2021-11-06 08:00:04 所属栏目:语言 来源:互联网
导读:如果您正在阅读此文,想必您对Project Lombok已经有了一段时间的了解。您是否正准备拥抱Lombok?还是正准备将如此酷炫的项目推荐给你的团队?如果您准备那么做,不妨听听我在使用Lombok一年后的一些感受。 我承认,Lombok是一个很不错的Java库,它可以让你在
如果您正在阅读此文,想必您对Project Lombok已经有了一段时间的了解。您是否正准备拥抱Lombok?还是正准备将如此酷炫的项目推荐给你的团队?如果您准备那么做,不妨听听我在使用Lombok一年后的一些感受。
 
我承认,Lombok是一个很不错的Java库,它可以让你在少写代码的同时耍耍酷,简单的几个注解,就可以干掉一大片模板代码。但是,所有的源代码很多时候是用来阅读的,只有很少的时间是用来执行的(你可以细品这句话)。
 
 
 
一年以前,我和大多数人都认为Lombok的出现会让Java的编码体验会更好,并极力的在我的团队中推荐使用Lombok。一年以后,我开始对此产生顾虑,尤其是在我准备为开源的博客系统Una-Boot升级Java版本时,我才意识到Lombok自己掉入了一个戏法陷阱。在我进一步分析其源代码并理解相关注解的工作原理后,发现我并不需要使用一个非标准的第三方库将Java转换为一个精巧而酷炫的语言。引入Lombok让我的项目一时爽,但一时爽的代价是随着项目推进,技术债务开始累积。
 
接下来,我将用几个大家耳熟能详的场景,重演自己是如何掉入Lombok的戏法陷阱。
 
爱的开始,恨的起源
 
 
面对Lombok提供的诸多“神走位”,你并不会介意在IDE上新增一个插件。对于IntelliJ IDEA玩家而言,只需搜索“Lombok Plugin”便可找到这款神器并安装上它。爱上Lombok从安装Lombok插件开始,恨也从此萌芽。
 
没使用Lombok之前,我们的源代码看起来是这一的:
 
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+  
            "}";  
    }  
}
 
 
每个JavaBean都会充斥着如上述getter,setter,equals,hashCode和toString的模板代码,这看起来像一个偏胖的人(不得不承认Java是一个有缺陷的编程语言)。当我们安装好Lombok插件后,IDE便可以识别其酷炫的注解,使用Lombok的@Getter和@Setter注解后,代码会像下面这样看起来很苗条:
 
@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+  
            "}";  
    }  
}
你以为Lombok就这点能耐?它还能让你代码的“身材”更苗条,更魔鬼。上面的代码仍然还有改进的空间,我们可以用@EqualsAndHashCod注解替换到equals和hashCode方法:
 
@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+  
            "}";  
    }  
}
现在的代码是否看起来爽多了?但这还不是最爽的时候。既然其他方法都替换掉了,那把toString方法也一起拿掉吧.如你所愿,可以使用@ToString注解去掉对于的方法:
 
@Getter  
@Setter  
@EqualsAndHashCode  
@ToString  
public class MyObject{  
    private Long id;  
    private String name;  
    private int age;  
    private int gender;  
}
经过Lombok的戏法之后,相比一开始的代码,看起来是不是很酷炫,很苗条,很性感?你以为到此为止了?远不止于此。你会发现类名上一大坨注解看起来好别扭,Lombok提供了一个组合注解@Data,可以替换掉类名头上那坨像翔一样的东西:
 
@Data  
public class MyObject{  
    private Long id;  
    private String name;  
    private int age;  
    private int gender;  
}
现在,Lombok是否让你的对象成为了你心目中完美的样子?魔鬼的“身材”,酷炫精炼。Lombok还有其他一些注解,如@Slf4j,@NoArgsConstructor,@AllArgsConstructor等等,介绍Lombok用法不是本文重点。
 
 
 
以上代码行数的变化过程,也许是无数程序员爱上Lombok的主要原因吧,这就像一个肥胖的人逐渐变成一个身材苗条的人。同时也让你看到了一个现象:你以为程序员很懒吗?其他有些时候他们比你想象中的还要懒。在爽的同时,也为代码种下了祸根。

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读