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