Lombok详解

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:
Lombok详解

提示:以下是本篇文章正文内容,下面案例可供参考

一、Lombok是什么?

Lombok 是一个 Java 库,它的主要目的是减少 Java 开发中的冗余代码,特别是在创建 POJOs(Plain Old Java Objects)时。通过使用 Lombok 提供的注解,开发者可以避免手动编写 getter、setter、构造函数、equals、hashCode 方法以及 toString 方法等常见且重复的代码。

二、使用步骤

1.引入库

代码如下(示例):

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.10</version>
        </dependency>

2.使用

引入Lombok依赖后可以通过注解来快速生成get/set方法以及有参无参构造
@Getter 和 @Setter:自动生成 getter 和 setter 方法。
@EqualsAndHashCode:生成 equals 和 hashCode 方法。
@ToString:生成 toString 方法。
@NoArgsConstructor:生成无参构造器。
@AllArgsConstructor:生成包含所有字段的构造器。
@Data:这是一个组合注解,包含了上面提到的所有注解的功能,适用于简单的 POJO 类。

2.1示例

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Person {
    private String name;
    private int age;
    private String sex;
}

使用完@Data、@AllArgsConstructor、@NoArgsConstructor、@Builder会自动为我们生成get/set、equals、hashcode、tostring、有参无参构造函数和构建者函数。虽然在源代码中只有这几个注解,但在生成的字节码文件中为我们写好了上述这些方法。

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.llf.bean;

public class Person {
    private String name;
    private int age;
    private String sex;

    public static PersonBuilder builder() {
        return new PersonBuilder();
    }

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

    public int getAge() {
        return this.age;
    }

    public String getSex() {
        return this.sex;
    }

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

    public void setAge(int age) {
        this.age = age;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public boolean equals(Object o) {
        if (o == this) {
            return true;
        } else if (!(o instanceof Person)) {
            return false;
        } else {
            Person other = (Person)o;
            if (!other.canEqual(this)) {
                return false;
            } else {
                label39: {
                    Object this$name = this.getName();
                    Object other$name = other.getName();
                    if (this$name == null) {
                        if (other$name == null) {
                            break label39;
                        }
                    } else if (this$name.equals(other$name)) {
                        break label39;
                    }

                    return false;
                }

                if (this.getAge() != other.getAge()) {
                    return false;
                } else {
                    Object this$sex = this.getSex();
                    Object other$sex = other.getSex();
                    if (this$sex == null) {
                        if (other$sex != null) {
                            return false;
                        }
                    } else if (!this$sex.equals(other$sex)) {
                        return false;
                    }

                    return true;
                }
            }
        }
    }

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

    public int hashCode() {
        int PRIME = true;
        int result = 1;
        Object $name = this.getName();
        result = result * 59 + ($name == null ? 43 : $name.hashCode());
        result = result * 59 + this.getAge();
        Object $sex = this.getSex();
        result = result * 59 + ($sex == null ? 43 : $sex.hashCode());
        return result;
    }

    public String toString() {
        return "Person(name=" + this.getName() + ", age=" + this.getAge() + ", sex=" + this.getSex() + ")";
    }

    public Person(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public Person() {
    }

    public static class PersonBuilder {
        private String name;
        private int age;
        private String sex;

        PersonBuilder() {
        }

        public PersonBuilder name(String name) {
            this.name = name;
            return this;
        }

        public PersonBuilder age(int age) {
            this.age = age;
            return this;
        }

        public PersonBuilder sex(String sex) {
            this.sex = sex;
            return this;
        }

        public Person build() {
            return new Person(this.name, this.age, this.sex);
        }

        public String toString() {
            return "Person.PersonBuilder(name=" + this.name + ", age=" + this.age + ", sex=" + this.sex + ")";
        }
    }
}


总结

Lombok 的使用可以极大地提高开发效率,让代码更加简洁、清晰。然而,值得注意的是,Lombok 生成的代码是在编译后的字节码中,因此在阅读或调试编译后的代码时,这些自动生成的方法不会在源代码中显示出来。这对于团队协作和代码审查可能会产生一定的影响,因此在项目中使用 Lombok 时需要确保所有团队成员都熟悉它的使用和限制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值