• 学习使用Lombok生成代码


    一、介绍

      Lombok官网:https://projectlombok.org/

      Lombok的功能简单一点说,就是可以帮我们生成一些代码,这些代码并不是在源码(source code)体现出来的,而是在字节码文件中。

      比如我们创建一个简单的pojo,需要生成有参构造函数、无参构造函数、getter、setter、toString、hashCode、equals这些个方法,虽然通过IDE也是可以生成代码的,但是,利用IDE生成的代码有个问题:代码量大、如果修改属性名后,这些方法基本都得重新生成,不咋方便。

      Lombox的功能:可以为我们生成上面说的那些方法,只需要我们在类名上使用相关注解即可。

    二、导入jar包

      这里使用Maven来导入依赖:

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.8</version>
        <scope>provided</scope>
    </dependency>
    

      注意,maven引入依赖是,scope是provided,也就是说,lombok包在运行时是不需要的,主要是在编译的时候使用。

    三、创建简单pojo

      这里举个简单的示例,就创建一个Person类:

    import lombok.AllArgsConstructor;
    import lombok.EqualsAndHashCode;
    import lombok.NoArgsConstructor;
    import lombok.ToString;
    
    // 注意下面使用的几个注解,都是Lombok提供的
    @NoArgsConstructor
    @AllArgsConstructor
    @ToString
    @EqualsAndHashCode
    public class Person {
    
        // 创建三个属性
        private Integer id;
        private String name;
        private String addr;
    
        // 没有使用IDE进行代码生成,编译源码时,Lombok会自动在字节码中生成方法(前面注解指定的那些方法)
    }
    

      

      生成的代码如下:

    public class Person {
        private Integer id;
        private String name;
        private String addr;
    
        public Person() {
        }
    
        public Person(final Integer id, final String name, final String addr) {
            this.id = id;
            this.name = name;
            this.addr = addr;
        }
    
        public String toString() {
            return "Person(id=" + this.id + ", name=" + this.name + ", addr=" + this.addr + ")";
        }
    
        public boolean equals(final Object o) {
            // 会调用下面canEqual方法
        }
    
        protected boolean canEqual(final Object other) {
            return other instanceof Person;
        }
    
        public int hashCode() {
            // 计算出hashCode
        }
    }
    

      

    四、Lombok常用的注解

      下面是Lombok常用的注解:

    @NoArgsConstructor      // 生成无参构造函数
    @AllArgsConstructor     // 生成包含所有属性的有参构造函数
    @ToString               // 生成toString方法
    @EqualsAndHashCode      // 生成equals和hashCode方法
    @Getter                 // 为所有字段生成getter
    @Setter                 // 为所有字段生成setter
    @Data                   // 等价于 @NoArgsConstructor + @Getter + @Setter + @EqualsAndHashCode + @ToString
    @Slf4j                  // 自动生成log对象
    @Builder                // 生成Builder代码(非Builder设计模式)

      

    五、进行测试

      创建测试类:

    package cn.ganlixin.pojo;
    
    import org.junit.Test;
    
    public class TestPerson {
    
        @Test
        public void testCreatePerson() {
            // 虽然IDE提示下面的构造函数有错误,但是执行的时候,并不会报错,而是会正常运行
            Person person = new Person(1, "ganlixin", "beijing");
            System.out.println(person);
            // 输出 Person(id=1, name=ganlixin, addr=beijing)
            // 说明有参构造函数和toString方法已经生成了
        }
    }
    

     

    六、解决IDEA提示Lombok生成方法未定义的问题

    6.1、问题描述

      因为我们在使用Lombok的时候,Lombok为我们生成的代码是在字节码中(*.class),而不是在source code中,所以存在IDE提示Lombok生成的方法未定义的错误,导致项目不能正常编译,但是我们都知道,这是没问题的,只是IDE的问题。

      比如,使用@Setter来注解一个类的时候,我们可以免于手动写或者利用IDE生成每个属性的Setter方法,因为Lombok会为在编项目的时候,扫描到@Setter方法,就会在字节码中为属性生成setter方法。但是,我们在代码中调用一个该类实例对象的setter方法的时候,IDE就会提示没有定义该方法,其实IDE也没有错,只是他不是根据字节码中的方法来判断的。  

    6.2、IDEA插件库安装

       步骤:打开IDEA -->  打开Preferences --> 选择Plugins,如下图

      

      安装Lombok插件后,重启IDEA即可。

    6.3、下载插件安装(针对IDEA)

      如果在插件库中没有搜到Lombok,可以去通过本地安装的方式,按照下面的步骤进行操作:

      地址:https://github.com/mplushnikov/lombok-intellij-plugin/releases

      根据版本下载一个zip包即可。

      启动IDEA,打开preferences,建议在IDEA的启动界面打开preferences进行设置,因为这样设置后是全局的,每个项目都可以使用。

      

      选择Plugins

      

       

      打开右边的设置,选择Install Plugin from Disk

      然后选择第一步下载的zip包,点击确认即可。

      

      进入到Plugins,重启IDEA即可

      点击Installed,可以看到上一步安装的Lombok插件

      

     
  • 相关阅读:
    福大软工1816 · 第六次作业
    福大软工1816 · 第五次作业
    BETA 版冲刺前准备
    Alpha 事后诸葛亮(团队)
    Alpha 答辩总结
    Alpha 冲刺 (10/10)
    Alpha 冲刺 (9/10)
    Alpha 冲刺 (8/10)
    Alpha 冲刺 (7/10)
    Alpha 冲刺 (6/10)
  • 原文地址:https://www.cnblogs.com/-beyond/p/11206793.html
Copyright © 2020-2023  润新知