美文网首页HCLAB
Java_SE-初探Lombok并拒绝它

Java_SE-初探Lombok并拒绝它

作者: Ahaochan | 来源:发表于2018-08-10 14:49 被阅读2次

    原文: Java_SE-初探Lombok并拒绝它

    前言

    在一个GitHub项目发现它使用了Lombok这个工具。没见过所以了解一下, 但是发现还是不太好用, 于是摒弃之。但好歹记录一下。

    介绍

    Lombok是一个可以大量减少代码的工具, 通过Pluggable Annotation Processing API的方式解析注解, 在编译期class文件注入gettersettertoString等等诸如此类的代码。

    准备工作

    1. 开发工具IDEA
    2. 在IDEA中安装Lombok Plugin插件
    3. 导入org.projectlombok.lombok

    示例

    Lombok通过注解生效, 官方注解列表

    @Getter
    @Setter
    public class User{
        private Long id;
        private String name;
    }
    
    public class MyTest() {
        public static void main(String[] args) {
            User user = new User();
            System.out.println("自动生成的方法:" + user.getId() + "," + user.getName());
        }
    }
    

    为什么摒弃它

    1. Lombok具有太强的侵入性
    2. 失去了封装的意义

    具有太强的侵入性

    我在第一次接触到到带有Lombok项目的时候, 编译报错, 虽然我导入了Lombokmaven地址, 但是仍然提示找不到getter方法。
    点进去一看, 发现根本没有getter方法, 只有一个@Getter注解。

    也就是说, 一旦你使用了Lombok, 所有编译你代码的人都必须使用Lombok编译, 传染性、侵入性太强

    失去了封装的意义

    更重要的是, 面向对象
    如果我们只是不想写gettersetter方法, 不如就直接将field设置成public
    长久的写重复的gettersetter方法已经让人不知道为什么要这样写, 只知道大家都是这样写, 以前都是这样写, 所以这样写。

    public void setName(String name) {
        this.name = name;
    }
    
    public void setName(String name) {
        switch(name) {
            case "admin": this.name = "I am admin:"+name; break;
            case "user" : this.name = "I am user:" +name; break;
        }
    }
    

    第二个setter方法, 封装了逻辑操作, 和第一个方法不同, 这就是setter方法的意义。

    相关文章

      网友评论

      • 北極魚:但是你吵不过那些培训机构出来的新手...

      本文标题:Java_SE-初探Lombok并拒绝它

      本文链接:https://www.haomeiwen.com/subject/tnnkbftx.html