Lombok - 让Java代码飘起来

2022-05-09 20:20:53 浏览数 (1)

前言

先为你写下一段常见代码:

代码语言:javascript复制
public class Person {
    private String name;
    private int age;
    private String sex;
    private String birthday;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getBirthday() {
        return birthday;
    }

    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }
}

这个就是我们最常见的代码,每个private修饰的成员变量都有一个setter和getter方法,今天要讲的Lombok就是可以自动帮你生成setter和getter的神器!代码就可以变成下面酱紫!

代码语言:javascript复制
@Setter
@Getter
public class Person {
    private String name;
    private int age;
    private String sex;
    private String birthday;
}

就是这么清爽,就是这么简洁!那么可能就要开始杠了,为什么不能用public修饰,这样setter和getter就直接可以不用写了,还用什么神器?但是规范就是规范,为了变量的访问权限控制在自己手中,所以必须用private修饰。接下来就是安利Lombok使用和其他功能。

IDEA安装插件(eclipse自行百度)

在settings的Plugins,搜索Lombok并安装,重启IDEA即可生效。

引入依赖

如果你是用的maven项目,使用pom引入:

代码语言:javascript复制
<dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.12</version>
</dependency>

不用maven的就直接导入lombok-1.18.12.jar

使用大全

写段代码,包含常用且易懂的Lombok注解

代码语言:javascript复制
@Setter
@Getter
@Slf4j
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class Person {
    private String name;
    private int age;
    private String sex;
    private String birthday;

    public void sing(@NonNull String songName) {
        // @Slf4j生成的logger
        log.info(songName);
        System.out.println(songName);
    }

    public void read(String bookPath) throws FileNotFoundException {
        @Cleanup
        FileInputStream in = new FileInputStream(bookPath);
    }
}
@Setter和@Getter

这两个注解用在类上就是为所有的private成员变量添加getter和setter方法,如果放在成员变量上,就是为单个成员变量添加setter和getter方法

@Slf4j

我们平时使用slf4j打印日志的时候,需要获取logger,

代码如下:

代码语言:javascript复制
Logger logger = LoggerFactory.getLogger(Person.class);
logger.info("Hello World!")

使用@Slf4j注解之后,lombok帮你创建了一个名为log的logger,可直接使用。

@ToString

这个不推荐使用,虽然可以帮你生成toString方法,但是往往不符合我们的要求。他输出的结果是这样的。

代码语言:javascript复制
Person(name=null, age=0, sex=null, birthday=null)
@AllArgsConstructor

帮你生成一个包含所有字段的构造器

@NoArgsConstructor

帮你生成一个无参类构造器,即new Person(){}

@NotNull

顾名思义,就是他修饰的变量和参数不能为null。测试一下

代码语言:javascript复制
public static void main(String[] args) {
        new Person().sing(null);
    }
// 报错:Exception in thread "main" java.lang.NullPointerException: songName is marked non-null but is null
@Cleanup

我们在读取文件的时候创建流,在使用完后总会调用close()来关闭这个流。在获取数据库的connection的时候,用完也会调用close()来关闭连接。@Cleanup修饰在创建流和获取Connection的时候,在使用完成后会自动帮你关闭,你就不用调用close()自行关闭

@Data

这个没写在样例代码中,是因为这个是一个作用在类上,并且是@Setter、@Getter、@Slf4j的集合体。但是不推荐使用。包含的注解如下图:

结语

Lombok简化了代码,但是也会在代码阅读上带来了一些障碍,利弊之间,自行权衡。任何事都有两面,有的人喜欢它,也有厌恶它。从我的角度来说,至少它让我的代码变得更简洁。据说Java14到时候也会提供Lombok的这些功能,拭目以待吧!

0 人点赞