详解IDEA插件之 Lombok

最新IDEA永久激活教程,稳定可靠,支持JetBrains全家桶产品、支持 Mac、linux和Windows:http://www.javatiku.cn/idea/1428.html

本文给大家介绍 Lombok 插件,以及如何使用该插件。

Lombok 属于编译级别的插件,我们可以在代码中注释,然后项目运行的时候会自动生成部分代码。

可能还是有同学不理解,那么我举个通俗的例子:我们 Class 中的属性是要有 getter settter等代码的,可以通过 IDEA的 Generate 来生成,但是在项目开发的时候, Class 中的属性是一直在变化、会时不时更改的,使用 IDEA的 Generate 是可以生成 getter settter等代码,但是属性一变我们就要对应的修改代码了,非常麻烦。

如果我们使用 Lombok 的注解就不会这么麻烦,Class 中的属性随便你怎么改,我写好了注解,项目编译的时候生成代码,是万万不会受影响的。

安装

我目前使用的是最新版 IDEA ,直接内置了这款插件。 以往老版本的 IDEA 还是需要自己在 Plugins 中安装。

引入依赖

插件安装好了,我们需要在项目里添加 Lombok 的编译支持,

Maven

在 pom 文件里面添加 dependency

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

Gradle

首先添加一个 Plugin

plugins {
    id 'io.franzbecker.gradle-lombok' version '1.11'
}

然后再配置 Lombok 的版本:

lombok { // optional: values below are the defaults
    version = "1.18.20"
    sha256 = ""
}

基本用法

Lombok 的核心就在于注解,都有以下这些注解:

  • @Data

    • 注解在类上;提供类所有属性的 get 和 set 方法,此外还提供了equals、canEqual、hashCode、toString 方法。
  • @Setter

    • 注解在 属性上;为单个属性提供 set 方法; 注解在类上,为该类所有的属性提供 set 方法, 都提供默认构造方法。
  • @Getter

    • 注解在属性上;为单个属性提供 get 方法; 注解在类,为该类所有的属性提供 get 方法,都提供默认构造方法。
  • @Log4j

    • 注解在类上;为类提供一个 属性名为 log 的 log4j 日志对象,提供默认构造方法。
  • @AllArgsConstructor

    • 注解在类上;为类提供一个全参的构造方法,加了这个注解后,类中不提供默认构造方法了。
  • @NoArgsConstructor

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

    • 注解在类上, 可以生成 equals、canEqual、hashCode 方法。
  • @NonNull

    • 注解在属性上,会自动产生一个关于此参数的非空检查,如果参数为空,则抛出一个空指针异常,也会有一个默认的无参构造方法。
  • @Cleanup

    • 这个注解用在变量前面,可以保证此变量代表的资源会被自动关闭,默认是调用资源的 close() 方法,如果该资源有其它关闭方法,可使用 @Cleanup(“methodName”) 来指定要调用的方法,也会生成默认的构造方法
  • @ToString

    • 这个注解用在类上,可以生成所有参数的 toString 方法,还会生成默认的构造方法。
  • @RequiredArgsConstructor

    • 这个注解用在类上,使用类中所有带有 @NonNull 注解的或者带有 final 修饰的成员变量生成对应的构造方法。
  • @Value

    • 这个注解用在类上,会生成含所有参数的构造方法,get 方法,此外还提供了equals、hashCode、toString 方法。
  • @SneakyThrows

    • 这个注解用在方法上,可以将方法中的代码用 try-catch 语句包裹起来,捕获异常并在 catch 中用 Lombok.sneakyThrow(e) 把异常抛出,可以使用 @SneakyThrows(Exception.class) 的形式指定抛出哪种异常,也会生成默认的构造方法。
  • @Synchronized

    • 这个注解用在类方法或者实例方法上,效果和 synchronized 关键字相同,区别在于锁对象不同,对于类方法和实例方法,synchronized 关键字的锁对象分别是类的 class 对象和 this 对象,而 @Synchronized 的锁对象分别是 私有静态 final 对象 lock 和 私有 final 对象 lock,当然,也可以自己指定锁对象,此外也提供默认的构造方法。

我给大家详细说明 @Data 注解:

使用这个注解直接会在项目编译的时候,自动生成该类中属性的 getsetequalscanEqualhashCodetoString 方法

我创建了一个学生类,类中只有两个学生属性:nameage ,然后我类名上写上注解 @Data,其他的什么都说没有了。

package src.main.Java;

import lombok.Data;

/**
 * @author BoJackzhang
 */
@Data
public class Student {
    String name = "张三";

    int age = 18;

}

然后,我运行编译项目,在打开编译之后的学生类,多出来的代码都是 Lombok 生成的。

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

package src.main.Java;

public class Student {
    String name = "张三";
    int age = 18;

    public Student() {
    }

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

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

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

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

    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 if (this.getAge() != other.getAge()) {
                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;
                }

                return true;
            }
        }
    }

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

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

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

至于其他的注解,我就不详细说了,大家用的时候看看文档就行。

通过 Lombok 可以很大程度提高我们开发的效率,我认为这也是在避免重复造轮子,毕竟能生成就不自己写,方便。

标签: idea破解, idea破解教程, IDEA教程, IDEA基础教程, IDEA高级教程, IDEA核心教程, IDEA免费激活码, IDEAmi免费注册码, idea注册码在线生成, idea激活

评论已关闭