资讯专栏INFORMATION COLUMN

使用lombok来简化你的Java Bean

taowen / 1165人阅读

摘要:可标注在类内部生成一个名为类名的内部类,用于快速构建。流程是这样的编译源代码,并生成语法树寻找实现了的代码,并调用。寻找被标注了注解的类,修改生成的语法树。将语法树生成为字节码就到这里了它还具备很多好用的功能,你可以去这里看看。

能做什么?

在使用lombok之前:

public class Book {

    private Integer id;

    private String title;

    private Date releaseDate;

    private Double price;

    private String[] authors;

    private String publisher;

    public Integer getId() {
        return id;
    }

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

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public Date getReleaseDate() {
        return releaseDate;
    }

    public void setReleaseDate(Date releaseDate) {
        this.releaseDate = releaseDate;
    }

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }

    public String[] getAuthors() {
        return authors;
    }

    public void setAuthors(String[] authors) {
        this.authors = authors;
    }

    public String getPublisher() {
        return publisher;
    }

    public void setPublisher(String publisher) {
        this.publisher = publisher;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Book)) return false;
        if (!super.equals(o)) return false;

        Book book = (Book) o;

        if (getId() != null ? !getId().equals(book.getId()) : book.getId() != null) return false;
        if (getTitle() != null ? !getTitle().equals(book.getTitle()) : book.getTitle() != null) return false;
        if (getReleaseDate() != null ? !getReleaseDate().equals(book.getReleaseDate()) : book.getReleaseDate() != null)
            return false;
        if (getPrice() != null ? !getPrice().equals(book.getPrice()) : book.getPrice() != null) return false;
        // Probably incorrect - comparing Object[] arrays with Arrays.equals
        if (!Arrays.equals(getAuthors(), book.getAuthors())) return false;
        return getPublisher() != null ? getPublisher().equals(book.getPublisher()) : book.getPublisher() == null;
    }

    @Override
    public int hashCode() {
        int result = super.hashCode();
        result = 31 * result + (getId() != null ? getId().hashCode() : 0);
        result = 31 * result + (getTitle() != null ? getTitle().hashCode() : 0);
        result = 31 * result + (getReleaseDate() != null ? getReleaseDate().hashCode() : 0);
        result = 31 * result + (getPrice() != null ? getPrice().hashCode() : 0);
        result = 31 * result + Arrays.hashCode(getAuthors());
        result = 31 * result + (getPublisher() != null ? getPublisher().hashCode() : 0);
        return result;
    }

    @Override
    public String toString() {
        return "Book{" +
                "id=" + id +
                ", title="" + title + """ +
                ", releaseDate=" + releaseDate +
                ", price=" + price +
                ", authors=" + Arrays.toString(authors) +
                ", publisher="" + publisher + """ +
                "}";
    }
}

在使用之后:

@Data
public class Book {

    private Integer id;

    private String title;

    private Date releaseDate;

    private Double price;

    private String[] authors;

    private String publisher;
}

并且从功能上,使用后=使用前。
说的简单点:从此以后不需要写GetterSettertoStringhashCodecanEqualconstructor这些大部分相似,却又不得不写的代码了。

怎么用?

一共有三个步骤

为你的开发工具安装插件。

IntelliJ IDEA: settings->Plugins->Browse Repositories->搜索Lombok Plugin->install

Eclipse / MyEclipse / Spring Tool Suite / JBoss Developer Studio: 看这里

Netbeans: 看这里

下载并导入Jar包,下载地址

在需要的类上标注注解

目前我使用的版本是1.16.16,有下面几个常用注解:

@Date

生成GetterSettertoStringequalshashCode方法。

可标注:Class

@Value

生成GettertoStringequalshashCode、还有全字段的构造方法。并且会将字段全都添加final

可标注:Class

@Builder

在类内部生成一个名为类名+Builder的内部类,用于快速构建。

可标注:Class

你可以这样使用它:

@Builder
public class Book {

    private Integer id;

    private String title;

    private Date releaseDate;

    private Double price;

    private String[] authors;

    private String publisher;

}
public static void main(String[] args) {
    Book book = Book.builder().id(1).title("书名").build();
}
@Getter/@Setter

生成GetterSetter方法。如果标注在类上则会生成这个类中所有字段的GetterSetter方法。

可标注:Field,Class

@NonNull

为你的构造函数、Setter添加空值校验。标注的字段赋值为空时,会抛出NullPointerException

可标注:Field,Method,Parameter,Local Variable

为什么?

自从Java 6起,Javac就支持了一个名叫JSR 269 Pluggable Annotation Processing API的规范,它的作用就是:如果你实现了这个API,在Javac编译时就会得到调用。而lombok正是运用了这一点。

流程是这样的:

Javac编译源代码,并生成语法树(AST)

Javac寻找实现了JSR 269 .... API的代码(lombok),并调用。

lombok寻找被标注了注解的类,修改Javac生成的语法树(AST)。

Javac将语法树生成为字节码(.class)

就到这里了

它还具备很多好用的功能,你可以去这里看看。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/70132.html

相关文章

  • 使用Lombok精简你的项目代码

    摘要:什么是一言以蔽之是一种工具,提供了简单的注解来简化我们的重复冗长代码。但在实际的项目中,我们常常只在定义的时候用上,而在业务代码中很少用到。总结是个非常有用的工具,能够帮助我们精简很多臃肿冗长的代码,不过也有其局限性,推荐在定义中使用。 什么是Lombok 一言以蔽之:lombok是一种工具,提供了简单的注解来简化我们的重复冗长Java代码。比如一个Java Bean,注解了lombo...

    AJie 评论0 收藏0
  • Lombok使用

    摘要:为方法或构造函数的参数生成检查语句,相当于生成的检查语句会插入到方法的最前端,如果是构造函数,则在或调用之后插入检查。 Lombok简介 Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法。 ...

    张金宝 评论0 收藏0
  • Lombok安装及Spring Boot集成Lombok

    摘要:注意,其是在编译源码过程中,帮你自动生成的。就是说,将极大减少你的代码总量。注解和类似,区别在于它会把所有成员变量默认定义为修饰,并且不会生成方法。不同的日志注解总结如下上面是注解,下面是编译后的代码参考资料下的安装以及使用简介注解介绍 Lombok有什么用 在我们实体Bean中有大量的Getter/Setter方法以及toString, hashCode等可能不会用到,但是某些时候仍...

    dkzwm 评论0 收藏0
  • SpringBoot 实战 (四) | 使用 LomBok

    摘要:创建对象工具类设置父类设置属性的使用范围,如等,也可以设置属性是否被修饰。所以显示的是按钮重启。即使没有重写方法,依然可以调用,而且结果和重写了方法一样。最后奉上项目完整代码后语以上就是我对插件的理解与使用,希望对你们有帮助。 微信公众号:一个优秀的废人如有问题或建议,请后台留言,我会尽力解决你的问题。 前言 上周去了开年会,去的地方是温泉度假村。老实说,我是无感的,90% 是因为没中...

    DandJ 评论0 收藏0
  • 第二十九章:基于SpringBoot平台使用Lombok优雅的编码

    摘要:还提供了全部参数的构造函数的自动生成,该注解的作用域也是只有在实体类上,因为只有实体类才会存在构造函数。当然除了全部参数的构造函数,还提供了没有参数的构造函数,使用方式与一致。 Lombok对于Java偷懒开发者来说应该是比较中意的,恰恰笔者就是一个喜欢在小细节上偷懒来提高开发效率的人。所以在技术框架的海洋里寻找了很久才在GitHub开源平台上找到,而在这之前国外很多程序猿一直使用该框...

    fanux 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<