欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用lombok简化你的代码

程序员文章站 2022-04-08 22:48:15
...

1. 简介

我们在java开发中经常要用实体类bean,需要花时间去添加相应的getter/setter,也许还要去写构造器、equals和ToString等方法,虽然编译器(IntelliJ IDEA快捷键位shift+insert)能够使用快捷键快速加入相应函数。但是加入函数以后bean多了很多类似方法,显得很冗长;一旦修改bean的属性以后,又要重新生成这些getter/setter方法,有时候也出现忘记修改的失误。

因此我们使用lombok简化bean结构,使得代码更加简单和清晰。

Lombok官方解释为:Project Lombok makes java a spicier language by adding 'handlers' that know how to build and compile simple, boilerplate-free, not-quite-java code.

lombok通过注解实现自动引入,下面介绍常用的几个注解:

  • @Data
    @Data注解在类上,会为类的所有属性自动生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法。

  • @Getter/@Setter
    自动生成Getter/Setter函数

  • @EqualsAndHashCode

  • @NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor
    无参构造器、部分参数构造器、全参构造器。Lombok没法实现多种参数构造器的重载。

2. 使用

2.1 引入maven依赖
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.6</version>
    <scope>provided</scope>
</dependency>
2.2 idea安装lombok插件

使用lombok简化你的代码并设置 Setting -> Compiler -> Annotation Processors -> Enable annotation processing勾选。
使用lombok简化你的代码

2.3 示例代码

(1)示例bean

import lombok.AllArgsConstructor;
import lombok.Data;

@Data
@AllArgsConstructor
public class LombokBean {
    private int id;
    private String name;
}

(2)使用测试

import org.junit.Assert;
import org.junit.Test;

public class TestLombokBean {
    @Test
    public void Test_GetBeanUserParam(){
        //输入
        int id = 10;
        String name = "myLombok";
        LombokBean lombokBean = new LombokBean(id, name);
        //预期
        String expect = "myLombok";
        //实际
        String actual = lombokBean.getName();
        Assert.assertEquals(expect,actual);
    }
}

(3)验证

将java文件编译成class文件

javac LombokBean.java -cp lombok-1.18.6.jar

然后进行反编译,可得

public class LombokBean {
    private int id;
    private String name;

    public int getId() {
        return this.id;
    }

    public String getName() {
        return this.name;
    }

    public void setId(int paramInt) {
        this.id = paramInt;
    }

    public void setName(String paramString) {
        this.name = paramString;
    }

    public boolean equals(Object paramObject) {
        if (paramObject == this) return true;
        if (!(paramObject instanceof LombokBean)) return false;
        LombokBean localLombokBean = (LombokBean) paramObject;
        if (!localLombokBean.canEqual(this)) return false;
        if (getId() != localLombokBean.getId()) return false;
        String str1 = getName();
        String str2 = localLombokBean.getName();
        return str1 == null ? str2 == null : str1.equals(str2);
    }

    protected boolean canEqual(Object paramObject) {
        return paramObject instanceof LombokBean;
    }

    public int hashCode() {
        int i = 1;
        i = i * 59 + getId();
        String str = getName();
        return i * 59 + (str == null ? 43 : str.hashCode());
    }

    public String toString() {
        return "LombokBean(id=" + getId() + ", name=" + getName() + ")";
    }

    public LombokBean(int paramInt, String paramString) {
        this.id = paramInt;
        this.name = paramString;
    }
}

可以得出,确实自动加了相关函数。

3 总结

本文简单介绍了使用lombok简化java中实体类的代码,由于目前以前不使用lombok,因此没有使用工作中的实际代码。

除了引入依赖,和idea中安装插件稍微有点麻烦以外,lombok在实际使用中可能会有其他坑,边用边完善。