2019-02-14 · Develop

使用 Lombok 简化代码

在和其他的语言进行比较的时候,经常会有人说别的语言一行的代码,使用 Java 需要是多行的代码才能实现。今天介绍的神器就可以帮助我们简化如 get/set 之类的样板代码 -- Lombok

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 或者 equals 等方法且能够很方便潜入编辑器和编译工具的 Java 库。

安装配置

lombok-install

上面的图片中展示了 Lombok 支持的编辑器和编译工具,相应的点开就能看见具体的安装方式。IDEA 编辑器中只需要安装相应的插件即可。下图中有 IDEA 编辑器支持的特性:

lombok-features

开始使用

从上面我们看到 Lombok 的特性有很多,可以到官方文档查看使用方式,这里挑选几个经常使用的注解看看其用法。首先需要引入 Maven 的依赖

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

@Getter / @Setter

这两个注解应该是使用最多的两个了吧,看看使用 Lombok 和不使用的对比图

lombok-getter-setter

@NonNull

空指针是 Java 开发中最烦躁的异常信息了, Lombok 可以确保我们的方法参数进行非空校验

public class Application {

    public static void main(String[] args) {
        nonNull(null);
    }

    public static void nonNull(@NonNull String name) {
        System.out.println(name);
    }
}

翻译过来就是

public static void nonNull(@NonNull String name) {
    if(name == null) {
        throw new NullPointerException("name");
    }
    System.out.println(name);
}

@ToString/@EqualsAndHashCode

@ToString
@EqualsAndHashCode(of = "name")
public class GetterSetterExample {

    @Getter @Setter private int age = 18;
    @Setter(AccessLevel.PROTECTED) private String name;
}

这两个注解从名字就能知道干什么的,这里主要说明下注解的参数

构造函数

@Data/@Value

@Data :注解在类上,相当于同时使用了 @ToString@EqualsAndHashCode@Getter@Setter@RequiredArgsConstrutor 这些注解,对于 POJO 类十分有用。
@Value :用在类上,是 @Data 的不可变形式,相当于为属性添加 final 声明,只提供 getter 方法,而不提供 setter 方法。

@Builder

改注解作用在类、构造器、方法上,提供复杂的 builder APIs,提供一种链式调用的方式。更多说明查考 Builder

@Log/@CommonsLog/@Log4j/@Log4j2/@Slf4j/@XSlf4j

根据不同的注解生成不同类型的 log 对象,但是实例名称都一样,在代码中可以直接调用 log.info("info message")。相应的类型

其他注解

还有一些其他的注解,比如 @Val@Var 。尤其是 var 和 Java 10 的关键字 var 功能相似。
在使用 @Var 注解的时候需要配置 lombok.config 配置文件才能正常的生效。注意配置文件需要在 lombok 1.14+ 版本才能使用。
根据官网的描述:lombok.config 配置文件可以放在任何目录,作用于该目录和其子目录。

lombok.var.flagUsage = ALLOW