15

Lombok使用

 3 years ago
source link: https://zhuanlan.zhihu.com/p/193963808
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Lombok使用

简单的说,Lombok就是给你的主力机配上僚机,简化代码开发,把Java变得更像Kotlin或者Scala那种改进的JVM语言。有了Lombok可以省略掉很多像GetterSetter重复的代码,更专注于业务上的开发,利于维护。

Lombok的官网Project Lombok

Lombok的原理大致看了下,是在编译生成AST之后,根据注解对AST进行修改,比如增加上GetterSetter方法,然后用修改后的AST生成字节码。

工欲善其事必先利其器,先给IDEA装上Lombok的插件

v2-a440ef2b3d8d2985bc9b4032a3f53c59_720w.jpg

要知道的是Lombok跟普通注解不同的是,它实际运行在了代码编译之后,而一般的自定义注解都是实际运行在运行时——一般通过反射获取到注解的内容,然后继续。

所以还要配置一下,把Enable annotation processing选中

配置完成后,可以加入Lombok的依赖了,以Maven为例

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

顺便说一下,为了追求更快的依赖下载速度,可以把镜像配置为国内的服务器地址,比如我就配置为阿里云的镜像地址

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 ">
    <mirrors>
        <mirror>
            <id>alimaven</id>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public</url>
            <mirrorOf>central</mirrorOf>
        </mirror>
    </mirrors>
</settings>

以一个最简单的POJO为例

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private long id;
    private String name;
    private int age;
}

加上了这几个注解后,生成的实际User

可以看到自动帮助生成了两个构造函数和一系列GetterSetter方法。

看看Lombok支持的稳定特性

val / var

跟现代语言支持的声明变量方法一样,能自动识别类型

@NotNull

帮助检查是否是null,然后抛出异常

@Cleanup

自动清理资源,帮你调用close(),跟Java7改进的try其实一样

@Getter / @Setter

这个不用多说了吧

@ToString

帮助生成toString,还有一些细节参数可供设置

@EqualsAndHashCode

帮助重写equalshashCode

@NoArgsConstructor / @RequiredArgsConstructor / @AllArgsConstructor

帮助生成构造函数

@Data

生成@ToString @EqualsAndHashCode @Getter @RequiredArgsConstructor以及非final字段的@Setter

@Value

生成不可变类

@Builder

生成构造器模式的类(方法里返回this,可以链式调用)

@SneakyThrows

捕获指定的异常,重新抛出一个Lombok.sneakyThrow异常对象

@Synchronized

自动生成一个Lock对象

@With

帮助生成一个克隆对象,还能指定修改的字段

@Getter(lazy=true)

生成一个lazy的字段

自动生成日志对象,还有@Slf4j以及 @CommonsLog


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK