Lombok使用

简介

Lombok项目是一个Java库,它会自动插入编辑器和构建工具中,Lombok提供了一组有用的注释,用来消除Java类中的大量样板代码。仅五个字符(@Data)就可以替换数百行代码从而产生干净,简洁且易于维护的Java类。

常用注解

“Boilerplate”是一个术语,用于描述在应用程序的许多部分中很少改动就重复的代码。对Java语言最常见的批评就是在大多数项目中都可以找到这种类型的代码,由于语言本身的局限性而更加严重。龙目岛计划(Project Lombok)旨在通过用简单的注释集代替众多的代码。
Lombok也存在一定风险,在一些开发工具商店中没有Project Lombok支持选择。 IDE和JDK升级存在破裂的风险,并且围绕项目的目标和实施存在争议。
常用注解:

  • @Setter :注解在类或字段,注解在类时为所有字段生成setter方法,注解在字段上时只为该字段生成setter方法。
  • @Getter :使用方法同上,区别在于生成的是getter方法。
  • @ToString :注解在类,添加toString方法。
  • @EqualsAndHashCode: 注解在类,生成hashCode和equals方法。
  • @NoArgsConstructor: 注解在类,生成无参的构造方法。
  • @RequiredArgsConstructor: 注解在类,为类中需要特殊处理的字段生成构造方法,比如final和被@NonNull注解的字段。
  • @AllArgsConstructor: 注解在类,生成包含类中所有字段的构造方法。
  • @Data: 注解在类,生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法。
  • @Slf4j: 注解在类,生成log变量,严格意义来说是常量。

案例

package com.lm.ad.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
public class User implements Serializable {

    private Integer id;
    private String name;
    private String pass;
    private String introduction;

    public User(String name, String pass, String introduction) {
        this.name = name;
        this.pass = pass;
        this.introduction = introduction;
    }
}

编译后结果:

package com.lm.ad.domain;

import java.io.Serializable;

public class User implements Serializable {
    private Integer id;
    private String name;
    private String pass;
    private String introduction;

    public User(String name, String pass, String introduction) {
        this.name = name;
        this.pass = pass;
        this.introduction = introduction;
    }

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

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

    public String getPass() {
        return this.pass;
    }

    public String getIntroduction() {
        return this.introduction;
    }

    public void setId(final Integer id) {
        this.id = id;
    }

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

    public void setPass(final String pass) {
        this.pass = pass;
    }

    public void setIntroduction(final String introduction) {
        this.introduction = introduction;
    }

    public String toString() {
        Integer var10000 = this.getId();
        return "User(id=" + var10000 + ", name=" + this.getName() + ", pass=" + this.getPass() + ", introduction=" + this.getIntroduction() + ")";
    }

    public User(final Integer id, final String name, final String pass, final String introduction) {
        this.id = id;
        this.name = name;
        this.pass = pass;
        this.introduction = introduction;
    }

    public User() {
    }

    public boolean equals(final Object o) {
        if (o == this) {
            return true;
        } else if (!(o instanceof User)) {
            return false;
        } else {
            User other = (User)o;
            if (!other.canEqual(this)) {
                return false;
            } else {
                label59: {
                    Object this$id = this.getId();
                    Object other$id = other.getId();
                    if (this$id == null) {
                        if (other$id == null) {
                            break label59;
                        }
                    } else if (this$id.equals(other$id)) {
                        break label59;
                    }

                    return false;
                }

                Object this$name = this.getName();
                Object other$name = other.getName();
                if (this$name == null) {
                    if (other$name != null) {
                        return false;
                    }
                } else if (!this$name.equals(other$name)) {
                    return false;
                }

                Object this$pass = this.getPass();
                Object other$pass = other.getPass();
                if (this$pass == null) {
                    if (other$pass != null) {
                        return false;
                    }
                } else if (!this$pass.equals(other$pass)) {
                    return false;
                }

                Object this$introduction = this.getIntroduction();
                Object other$introduction = other.getIntroduction();
                if (this$introduction == null) {
                    if (other$introduction != null) {
                        return false;
                    }
                } else if (!this$introduction.equals(other$introduction)) {
                    return false;
                }

                return true;
            }
        }
    }

    protected boolean canEqual(final Object other) {
        return other instanceof User;
    }

    public int hashCode() {
        int PRIME = true;
        int result = 1;
        Object $id = this.getId();
        int result = result * 59 + ($id == null ? 43 : $id.hashCode());
        Object $name = this.getName();
        result = result * 59 + ($name == null ? 43 : $name.hashCode());
        Object $pass = this.getPass();
        result = result * 59 + ($pass == null ? 43 : $pass.hashCode());
        Object $introduction = this.getIntroduction();
        result = result * 59 + ($introduction == null ? 43 : $introduction.hashCode());
        return result;
    }
}
上一篇:【STM32H7】第2章 初学RL-USB准备工作


下一篇:[Java Spring MVC] Introduction to interceptors