lombok的使用

在IDE中添加lombok插件

在idea中安装lombok插件


image.png
image.png

在eclipse中安装lombok插件

下载lombok.jar包https://projectlombok.org/download.html

运行lombok.jar.png
安装到eclipse.png

在pom文件中添加依赖

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

lombok常用注解

  1. @Getter,@Setter。注解可以针对类的属性字段自动生成Get/Set方法。


    位于类上方.png

    位于属性上方.png

上面的写法相当于这样写


上面的写法相当于这样写.png

2.@NoArgsConstructor,@AllArgsConstructor。注解为类自动生成了无参构造方法、和包含所有参数的构造方法。

image.png

上面的写法相当于这样写


上面的写法相当于这样写.png

3.@Data。生成get,set,toString,equals,hashCode,canEqual方法


image.png

上面的写法相当于

public class Booth {
    private String name;
    private String remark;

    public Booth() {
    }

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

    public String getRemark() {
        return this.remark;
    }

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

    public void setRemark(String remark) {
        this.remark = remark;
    }

    public boolean equals(Object o) {
        if (o == this) {
            return true;
        } else if (!(o instanceof Booth)) {
            return false;
        } else {
            Booth other = (Booth)o;
            if (!other.canEqual(this)) {
                return false;
            } else {
                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$remark = this.getRemark();
                Object other$remark = other.getRemark();
                if (this$remark == null) {
                    if (other$remark != null) {
                        return false;
                    }
                } else if (!this$remark.equals(other$remark)) {
                    return false;
                }

                return true;
            }
        }
    }

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

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

    public String toString() {
        return "Booth(name=" + this.getName() + ", remark=" + this.getRemark() + ")";
    }
}

4.@Builder。提供builder设计模式的实现。

@Builder
public class Booth {
    private String name;

    private String remark;
}

在获取Booth对象时

private Booth getBooth(String name, String remark){
        Booth booth = Booth.builder()
                .name(name)
                .remark(remark)
                .build();
        return booth;
    }

当使用@Builder时将不会自动生成无参构造方法(会生成一个全参数的构造方法)
@Builder,@NoArgsConstructor不能同时使用

原理

lombok工作原理
lombok工作流程

在编译过程中Source File(源代码文件)被转换成AST(抽象语法树)然后在注解处理过程中调用实现了JSR 269 API规范的lombok程序,lombok修改AST。修改后的AST会被解析并生成字节码文件。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在面向对象编程中必不可少需要在代码中定义对象模型,而在基于Java的业务平台开发实践中尤其如此。相信大家在平时开发...
    消失er阅读 12,834评论 15 150
  • 今天看到峰哥(大神)写的的项目的pom里面引人了一个叫Lombok 的依赖,不认识便百度了一下结果如下:   Lo...
    ggr阅读 1,793评论 0 1
  • 最近工作接触了一个叫lombok的插件,通过注释,能有效地减少代码的冗余,让开发者将更多的经历放在业务和逻辑上...
    泯珉阅读 704评论 0 52
  • Lombok是什么? 官方解释 Lombok是一种自动接通你的编辑器和构建工具的一个Java库。不用再一次写额外的...
    _果不其然_阅读 224评论 0 0
  • 开篇说个故事,如若不感兴趣可直接往下拉。 之前一个大三的学生朋友有一次兴冲冲地告诉我他想投身区块链这个行业,我当时...
    撰撰喵阅读 391评论 0 1