1. 程式人生 > >【Java開發程式碼優化】lombok外掛,通過java註解簡化程式碼的開發

【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方法測試下:

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 :標註在欄位和方法上,表示非空,會在第一次使用時判斷。