Lombok 安裝、入門 - 消除冗長的 java 程式碼
一、介紹
lombok是一個幫助簡化程式碼的工具,通過註解的形式例如@Setter @Getter,可以替代程式碼中的getter和setter方法,雖然eclipse自帶的setter、getter程式碼生成也不需要我們手動的去敲寫,但是使用@Setter @Getter這樣的註解,能夠使我們的程式碼看上去更加的簡潔、優雅。
二、安裝
使用 lombok 是需要安裝的,如果不安裝,IDE 則無法解析 lombok 註解
1、下載lombok外掛
官網:https://www.projectlombok.org/download
百度雲:
連結:https://pan.baidu.com/s/1Z4sKHNUPGFhLMJs6rQ1oUg
提取碼:nmqc
2、將下載的lombok.jar放在eclipse.ini同級目錄下
3、執行jar包(直接點選或者cmd命令:java -jar lombok.jar)
4、選擇編譯器地址打鉤,如果沒有識別到電腦上的IDE可以點選下方的Specify location新增ide可執行檔案路徑
5、檢查eclipse.ini檔案中-javaagent:D:\xxx\lombok.jar地址是否有誤(如果路徑含中文會啟動失敗)
6、重啟eclipse,就發現能夠正常使用啦
三、使用
注意:使用之前需要先按照以上步驟安裝,在eclipse.ini配置
1、引入依賴
在pom.xml中新增如下依賴:
<!-- 簡化程式碼工具lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <scope>provided</scope> </dependency>
2、常見註解解析
Lombok的使用方法只需在對用類或方法新增對應註解即可
線上官方文件:https://projectlombok.org/features/all
(1)@Getter
,
@Setter
該註解使用在類或者屬性上,該註解可以使用在類上也可以使用在屬性上。生成的getter遵循布林屬性的約定。例如:boolean型別的Foo,getter方法為isFoo
而不是getFoo
在使用該註解時,會預設生成一個無參構造。和對應的getter, setter。
關於boolean型別的資料,仔細看以下例子:
package com.lemon.zuul.config; import lombok.Getter; import lombok.Setter; @Getter @Setter public class TestDemo { private String userName; private int userAge; private boolean userSex ; private boolean isLeader; }
圖中布林型別為基本資料型別
setter方法
上圖第一行為成員變數isLeader的setter方法,其中isLeader中的is不見了,下方第四行為成員變數userSex的setter方法,一切正常。
getter方法
長這樣,get方法的生成規範是對於布林基本資料型別是is+變數名,如果變數名包含了一個is那麼也是隻有一個is不會是isIsxxx。
eclipse自動生成規則同上
修改布林變數為對應包裝類
package com.lemon.zuul.config; import lombok.Getter; import lombok.Setter; @Getter @Setter public class TestDemo { private String userName; private int userAge; private Boolean userSex ; private Boolean isLeader; }
setter方法
符合我們想要的
getter方法
也符合我們想要的
總結:布林型別為對應包裝類時,setter、getter生成符合我們預期結果,而為基本資料型別時,get類的方法是以is開頭。
(2)@Data
該註解使用在類上,該註解是最常用的註解,它結合了@ToString,@EqualsAndHashCode, @Getter和@Setter。本質上使用@Data
註解,類預設@ToString
和@EqualsAndHashCode
以及每個欄位都有@Setter
和@getter
。該註解也會生成一個公共建構函式,可以將任何@NonNull
和final
欄位作為引數。
雖然@Data
註解非常有用,但是它沒有與其他註解相同的控制粒度。@Data
提供了一個可以生成靜態工廠的單一引數,將staticConstructor
引數設定為所需要的名稱,Lombok自動生成的建構函式設定為私有,並提供公開的給定名稱的靜態工廠方法。
註解示例:
@Data(staticConstructor="of") public class Company { private final Person founder; private String name; private List<Person> employees; }
等同於Java原始碼:
public class Company { private final Person founder; private String name; private List<Person> employees; private Company(final Person founder) { this.founder = founder; } public static Company of(final Person founder) { return new Company(founder); } public Person getFounder() { return founder; } public String getName() { return name; } public void setName(final String name) { this.name = name; } public List<Person> getEmployees() { return employees; } public void setEmployees(final List<Person> employees) { this.employees = employees; } @java.lang.Override public boolean equals(final java.lang.Object o) { if (o == this) return true; if (o == null) return false; if (o.getClass() != this.getClass()) return false; final Company other = (Company)o; if (this.founder == null ? other.founder != null : !this.founder.equals(other.founder)) return false; if (this.name == null ? other.name != null : !this.name.equals(other.name)) return false; if (this.employees == null ? other.employees != null : !this.employees.equals(other.employees)) return false; return true; } @java.lang.Override public int hashCode() { final int PRIME = 31; int result = 1; result = result * PRIME + (this.founder == null ? 0 : this.founder.hashCode()); result = result * PRIME + (this.name == null ? 0 : this.name.hashCode()); result = result * PRIME + (this.employees == null ? 0 : this.employees.hashCode()); return result; } @java.lang.Override public java.lang.String toString() { return "Company(founder=" + founder + ", name=" + name + ", employees=" + employees + ")"; } }
(3)@NonNull
該註解使用在屬性上,該註解用於屬的非空檢查,當放在setter方法的欄位上,將生成一個空檢查,如果為空,則丟擲NullPointerException
。該註解會預設是生成一個無參構造。
註解示例和Java原始碼:
(4)@EqualsAndHashCode
該註解使用在類上,該註解在類級別註釋會同時生成equals
和hashCode
。
註解示例和Java原始碼:
(5)@toString
該註解使用在類上,該註解預設生成欄位以名稱-值的形式輸出。
註解示例和Java原始碼:
(6)@Value
這個註解用在 類 上,會生成含所有引數的構造方法,get 方法,此外還提供了equals、hashCode、toString 方法。沒有setter
(7)@Log4j
註解在類上;為類提供一個 屬性名為log 的 log4j 日誌物件
(8)NoArgsConstructor
註解在類上;為類提供一個無參的構造方法
(9)AllArgsConstructor
註解在類上;為類提供一個全參的構造方法