Lombok初探

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.

知乎的介绍:

Lombok 是一种 Java™ 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO)。它通过注解实现这一目的。

换言之,就是lombok通过编译时修改AST(这个是javac标准允许的)达到各种奇奇怪怪的目的,是一套可以充分解放你双手,并且可以提升代码逼格的工具类,其酸爽程度不亚于guava。

下面结合几个例子来说明。

使用场景

1、对于一个简单的实体类,我们一般需要对每一个变量编写getter/setter方法以及类的toString方法,甚至有时候还需要编写equalshashCode方法,当我们开发一个工程时,一般会有大量的实体类,带来的编码量是很巨大的,虽然IntellJ等常用的IDE可以自动生成这些方法,但看着那一坨代码,总归是不太爽的。

// 使用lombok
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.EqualsAndHashCode;

@Getter
@Setter
@ToString
@EqualsAndHashCode
public class User {
    private Integer id;
    private String name;
    private String phone;
}

当然,也可以简单粗暴的使用@Data,它默认包含了以上几个注解。

2、除了基本的getter/setter方法,lombok还可以通过@NoArgsConstructor@AllArgsConstructor@RequiredArgsConstructor等注解直接生成构造方法。少年,如果你有过频繁修改实例变量,又频繁重新生成构造方法的经历,你会感激我的。

3、先来看下面这个使用了构建者模式的类。

// 一般写法
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
public class BuilderExample {
    private String name;
    private int age;
    private Set<String> occupations;

    BuilderExample(String name, int age, Set<String> occupations) {
        this.name = name;
        this.age = age;
        this.occupations = occupations;
    }

    public static BuilderExampleBuilder builder() {
        return new BuilderExampleBuilder();
    }

    public static class BuilderExampleBuilder {
        private String name;
        private int age;
        private Set<String> occupations;

        BuilderExampleBuilder() {
        }

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

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

        public BuilderExampleBuilder occupation(String occupation) {
            if (this.occupations == null) {
                this.occupations = new HashSet<String>();
            }

            this.occupations.add(occupation);
            return this;
        }

        public BuilderExampleBuilder occupations(Collection<? extends String> occupations) {
            if (this.occupations == null) {
                this.occupations = new HashSet<String>();
            }

            this.occupations.addAll(occupations);
            return this;
        }

        public BuilderExampleBuilder clearOccupations() {
            if (this.occupations != null) {
                this.occupations.clear();
            }

            return this;
        }

        public BuilderExample build() {
            return new BuilderExample(name, age, occupations);
        }

    }
}

使用@Builder注释能够自动生成复杂的构建器API。

// 使用lombok注解的写法
import lombok.Builder;
import lombok.Singular;
import java.util.Set;

@Builder
public class BuilderExample {
    private String name;
    private int age;
    @Singular private Set<String> occupations;
}

😱……惊不惊喜?意不意外?

4、再来看一个魔性的例子:使用输入输出流拷贝两个文件。先给你5秒钟想一下常规写法(记得关闭文件流)。

5…

4…

3…

2…

1…

下面看一下使用lombok的写法。

public static void copyFile(String fromFile, String toFile) throws IOException {
    @Cleanup InputStream in = new FileInputStream(fromFile);
    @Cleanup OutputStream out = new FileOutputStream(toFile);
    byte[] b = new byte[4096];
    int n = -1;
    while ((n = in.read(b)) != -1) {
        out.write(b, 0, n);
    }
}

相当于try-with-resource写法,但代码整洁多了有没有?

5、终于说到日志了。通过@Slf4j注解,能够自动添加logger变量,释放了每个类中都需要编写的private static final Logger LOGGER = LoggerFactory.getterLogger($clazz$.class)代码。当然,类似的注解还有@Log@Log4j@Log4j2等。

该工具还有大量其他注解,可通过查看官方文档探索更多内容。

如何使用

1、如果你的项目是一个maven工程,需要在pom.xml中加入对lombok类库的依赖,并将maven-compiler-plugin升至3.3版本及以上。

<dependencies>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <scope>provided</scope>
    </dependency>
<dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.3</version>
        </plugin>
    </plugins>
</build>

另外还支持gradleantkobalt等构建工具,具体方法请自行百度或参考官方说明

2、如果你用IDE开发(废话),那么需要安装Lombok Plugin,目前支持IntellJEclipseNetbeansMyEclipseSpring Tool SuiteJBoss Developer StudioVisual Studio Code等IDE工具,具体方法请自行百度或参考官方说明

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。