Java 开发中的 Lombok 是什么?

发布于:2022-12-30 ⋅ 阅读:(490) ⋅ 点赞:(0)

一. 血案

今天有个学生告诉我,他在项目中使用Mybatis框架查询时报错,提示无法创建对象。但自己仔细地检查了代码都没有发现错误,于是他就半夜拼命地给我发消息求救。

我起床拿手机,还差点摔倒闪了我的老腰,我老婆看我这么着急还以为我有了小三儿 ,打得我满脸血呼刺啦的。

二. 原因和解决方案

然后我仔细看了下他的代码,发现Mybatis的使用确实没错,但发现代码中Lombok插件的@Builder注解使用有误。他只使用@Builder注解,导致实体类失去了默认的无参构造函数,最终导致Mybatis无法创建对象而引发了这个错误!其实他只要加上@NoArgsConstructor和@AllArgsConstructor注解,就可以解决他的问题。

第二天,我问了班里其他人的idea中使用Lombok插件是否正常,结果发现有部分人告诉我插件无法正常使用。我看了后,发现有些学生的idea版本是2020.3版本,与之前大多数人使用的2020.1版本不同,造成Lombok插件的安装配置也有所差异。在此,我给大家分享一下在不同版本中,idea安装和配置Lombok插件的具体过程。

三. Lombok插件简介

我们知道,Lombok插件是目前Java中使用频率非常高的一款插件,可以在编译阶段自动生成实体类的常用方法。示例如下:

作者:Java马剑威
链接:https://www.zhihu.com/question/486918498/answer/2656884974
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

// 没有使用Lombok插件的实体类,需要手动写getter和setter,以及构造方法等
public class Student {
    private Integer id;
    private String name;
    private Integer age;

    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
}
// 使用了Lombok插件的实体类
@Data // 此注解自动生成getter和setter,toString,equals和hashCode等方法
@NoArgsConstructor // 此注解生成无参构造函数
@AllArgsConstructor // 此注解生成全参构造函数
public class Student {
    private Integer id;
    private String name;
    private Integer age;
}

从上面的代码中我们可以看出,使用了Lombok后Java实体类的源码会变得非常简洁,且易于修改。那么在idea中该如何安装和使用Lombok插件呢?

四. Lombok插件在idea中的安装和配置

4.1 安装

idea2020.2之前的版本需要自己安装Lombok插件,可以如下操作:

 

ideidea2020.2后面的版本中已经集成了Lombok插件,不用手动下载安装。

4.2 配置

idea在2020.2之前的版本中的配置:

idea2020.2版本之后的配置:

  • 先勾选上图中的地方;
  • 添加如下配置,不同的版本可能显示不一样,在VM options后面的框中添加参数。-Djps.track.ap.dependencies=false

五. 基本使用

5.1 在项目中导入lombok依赖

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.12</version>
    <scope>provided</scope>
</dependency>

作者:Java马剑威
链接:https://www.zhihu.com/question/486918498/answer/2656884974
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

5.2 使用

Lombok插件的使用比较简单,就是在实体类中,只需要写入相应的属性,然后在类上面添加相应的注解即可。例如:

// 使用了Lombok插件的实体类
@Data // 此注解自动生成getter和setter,toString,equals和hashCode等方法
@NoArgsConstructor // 此注解生成无参构造函数
@AllArgsConstructor // 此注解生成全参构造函数
@Builder // 添加相应的实体类的构建器
public class Student {
    private Integer id;
    private String name;
    private Integer age;
}

作者:Java马剑威
链接:https://www.zhihu.com/question/486918498/answer/2656884974
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

5.3 常用注解介绍

接下来我给大家介绍一下Lombok插件中的常用注解:

  • @Setter和@Getter :对类中的属性生成相应的getter和setter方法。
  • @ToString :生成toString()方法。该注解有以下属性:
  • callSuper:是否输出父类的toString()方法,默认为false。
  • includeFieldNames:是否包含字段名称,默认为true。
  • exclude:排除生成到toString方法中的字段。
  • @EqualsAndHashCode :生成equals()方法和hashCode()方法。
  • @NoArgsConstructor :生成无参构造方法。
  • @AllArgsConstructor :生成全参构造方法。
  • @Data :相当于@Setter + @Getter + @ToString + @EqualsAndHashCode。
  • @NonNull:判断是否为空,如果为空,则抛出java. lang.NullPointerException。
  • @Builder :生成构建器。注意:会自动生成全参构造方法,可能会导致默认无参构造方法失效。

这些注解的具体用法如下:

@Builder
public class Student {
    private Integer id;
    private String name;
    private Integer age;
}

public class TestMain {
    public static void main(String[] args) {
    // 使用Builder创建Student对象
        final Student student = Student.builder()
                .id(1)
                .name("张三")
                .age(20)
                .build();
        System.out.println(student);
    }
}

作者:Java马剑威
链接:https://www.zhihu.com/question/486918498/answer/2656884974
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

现在你知道Lombok插件是怎么安装配置,以及使用的了吗?如果你还有什么别的疑问,可以在评论区留言哦。

本文含有隐藏内容,请 开通VIP 后查看