【Java开发代码优化】lombok插件,通过java注解简化代码的开发

在开发的过程中,我们如何写出高质量的代码,写出优雅的代码,写出高度可扩展的代码。今天我们就简单介绍一下如何提高我们的代码质量。

使用lombok简化代码

在介绍lombok之前,我们先来看一段代码:

public class Person {

    private Long id;

    private String name;

    private Integer age;

    private Integer sex;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

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

    public Integer getSex() {
        return sex;
    }

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

这段代码大家应该都很熟悉,我们在开发javaweb项目时,定义一个Bean,会先写好属性,然后设置getter/setter
方法,这段代码本身没有任何问题,也必须这样写。

但是每个bean都需要getter/setter,这样写的话代码就不够优雅了,这段代码我们如何优雅的写呢?接下来,就轮到lombok出场了。

lombok是一个通过注解形式来简化我们的代码的一个插件,要使用它,我们应该先安装插件,安装步骤如下:
1.file ---->setting---->plugins
在这里插入图片描述

2、搜索lombok,并安装它,然后重启。
在这里插入图片描述

3、在file --> setting -->Build --> compiler 找到Annotaion Processors,将 Enable annotaion processing 勾选上。

在这里插入图片描述

4、 最后我们需要添加lombok的依赖:

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

接下来,我们通过注解简化Person类


import lombok.Getter;
import lombok.Setter;

@Setter
@Getter
public class Person {
     private Long id;
     private String name;
     private Integer age;
     private  Integer sex;
}

我们可以看到,在类上加入了Getter 和Setter 两个注解,将之前写的getter /setter 方法干掉了,这种代码看者清爽,写个main方法测试下:

扫描二维码关注公众号,回复: 4302616 查看本文章
public static void main(String[] args) {
        Person person = new Person();
        person.setName("lynn");
        person.setId(1L);
        System.out.println(person.getName());
    }

我们并没有写任何的getter\setter 方法,只是加了两个注解就可以调用了,这是为什么呢?这是因为lombok提供了Getter 和Setter 注解,是编译时注解,也就是在编译时,lombok会自动为我们添加getter /setter方法,因此我们不需要去写get /set方法就可以直接调用。

lombok 提供了很多注解,下面我们了解一下其他的注解:

@Accessors

该注解的作用是:是否开启链式调用,比如我们开始链式调用:

import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

@Setter
@Getter
//chain 设置为true表示开始链式调用
@Accessors(chain = true)
public class Person {
     private Long id;
     private String name;
     private Integer age;
     private  Integer sex;

    public static void main(String[] args) {
         Person p = new Person();
         p.setName("li").setAge(14);
    }
}

Builder

构建者模式 ,我们在使用第三方框架时经常看到Builder 模式,比如HttpClient 的:

RequestConfig config = RequestConfig.custom()
                            .setConnectionRequestTimeout(timeout)
                            .setConnectTimeout(timeout)
                            .setSocketTimeout(timeout)
                            .build();

那么通过 Builder 注解可以很方便的实现它:

@Setter
@Getter
//chain 设置为true表示开始链式调用
@Accessors(chain = true)
@Builder
public class Person {
     private Long id;
     private String name;
     private Integer age;
     private  Integer sex;

    public static void main(String[] args) {
         Person p = new PersonBuilder().name("zhang").age(12).build();
        System.out.println("name:"+p.getName());
    }
}

@Data

编译时添加getter、setter、toString、equals 和hashCode方法,如:

@Data
public class Person {
     private Long id;
     private String name;
     private Integer age;
     private  Integer sex;

    public static void main(String[] args) {
         Person person = new Person();
        person.setName("zhang");
        System.out.println("name:"+person.getName());

    }
}

@Cleanup

添加输入输出流close 方法,如:

public static void main(String[] args) throws Exception{
        @Cleanup InputStream inputStream = new FileInputStream("1.txt");

    }

我们通过断点调试发现,它会调用close(),说明lombok 帮我们生成了close()
在这里插入图片描述

通过lombok 的注解,可以极大的减少我们的代码量,并且更加清爽,更加优雅。
lombok 还有很多注解:如:

  • @ToString:生成toString() 方法。
  • @EqualsAndHashCode: 生成 equals 和hashCode方法。
  • @NoArgsConstructor、 @AllArgsConstructor: 生成午参合全参构造函数。
  • Value: 生成getter 、toString、equals、hashCode和全参构造函数
  • @NonNull :标注在字段和方法上,表示非空,会在第一次使用时判断。

猜你喜欢

转载自blog.csdn.net/taojin12/article/details/84257164