IDEA 插件 Lombok 基本介绍和使用

本贴最后更新于 1803 天前,其中的信息可能已经沧海桑田

1、基本介绍

Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java.  
Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more.

以上为官网介绍,简而言之,Lombok 通过注解的方式,简化代码,进行快速开发,通过注解帮你在编译的时候生成相应的代码!如 getter 等方法!

2、插件安装

image.png

在 IDEA 的插件中心搜索 lombok,点击安装,完成后,重启即可!

3、简单使用

1、开启 Annocation Processors
image.png

如上图所示,开启 IDEA 的 Annocation Processors。
2、添加依赖

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

在 maven 的 pom.xml 文件中添加上面的依赖,便可以使用

4、相关注解简单介绍

  • @Setter/@Setter :注解在属性上;为属性提供 setter/getter 方法

  • @ToString:为类生成 tostring 方法,输出类名和所有属性

  • @EqualsAndHashCode:生成 equal 和 hashCode 方法,可以通过参数,排除一些属性

  • @NoArgsConstructor :注解在类上;为类提供一个无参的构造方法

  • @RequiredArgsConstructor:会生成一个包含常量(final 修饰),和标识了 NotNull 的变量的构造方
    法 。

  • @AllArgsConstructor :注解在类上;为类提供一个全参的构造方法

  • @Data ;注解在类上相当于 @Getter、@Setter、@ToString 等几个注解的合集。

  • @Log4j :注解在类上,为类提供一个属性名为 log 的 log4j 日志对象

  • @Cleanup:帮助关闭资源

  • @Synchronized :方法级别,添加同步锁

  • @SneakyThrows : 等同于 try/catch 捕获异常

  • @NonNull : 非 null 注解,参数为 null 会抛出空指针异常

  • @Value : @Data 类似,区别在于它会把所有成员变量默认定义为 private final 修饰,并且不会生成 set 方法

  • @Accessors 注解:类级别,控制各种方法操作。

    • fluent: boolean 值,默认为 false。此字段主要为控制生成的 getter 和 setter 方法前面是否带
      get/set;false 带,true 不带。
    • chain :boolean 值,默认 false。如果设置为 true,setter 返回的是此对象,可以链式调用方法。
    • prefix :设置前缀 例如:@Accessors(prefix = "abc") private String abcAge 当生成 get/set 方法
      时,会把此前缀去掉

以下是编译前的代码

import lombok.Data;
import lombok.experimental.Accessors;

/**
 * @author Mckay
 * @create 2019-12-14
 * @description lombok简单示例,编译前
 **/
@Data
@Accessors(chain = true)
public class Student {
    private String name;
    private int age;
    private String gender;

    public static void main(String[] args) {
        Student student = new Student();
        student.setName("小明").setAge(24).setGender("男");
        System.out.println(student);
    }
}

以下是编译后的代码

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//  lombok简单示例,编译后


public class Student {
    private String name;
    private int age;
    private String gender;

    public static void main(String[] args) {
        Student student = new Student();
        student.setName("小明").setAge(24).setGender("男");
        System.out.println(student);
    }

    public Student() {
    }

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

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

    public String getGender() {
        return this.gender;
    }

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

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

    public Student setGender(String gender) {
        this.gender = gender;
        return this;
    }

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

                    return true;
                }
            }
        }
    }

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

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

    public String toString() {
        return "Student(name=" + this.getName() + ", age=" + this.getAge() + ", gender=" + this.getGender() + ")";
    }
}

更多的详细的信息可以查看官网介绍

  • Lombok
    10 引用 • 6 回帖
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    180 引用 • 400 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...