01.28 還不會用lombok?你手不痛嗎

事件回顧

小黑不是一個囉嗦的人,所以直接來看下代碼

<code>@Data
public class DataSourceConditionVo extends BaseConditionVo{
private Long id;
private String sourceName;
private Integer status;
private Long driverId;
public DataSourceConditionVo(Long id,Integer status){
this.id = id;
this.status = status;
}
}
/<code>

大家看出有什麼問題嗎?小黑悄悄的告訴大家,少寫了一個無參的構造函數,導致 controller 將客戶端傳過來的json轉成實體對象的時候報錯了。

大家可不要笑話犯這麼低級的錯誤,其實之前是有寫無參構造函數的,只是看到 @Data 這個註解,以為會自動的生成無參構造函數,所以就把無參構造函數去掉了。汗。。

為了防止繼續犯錯,所以把lombok(lombok是什麼?你還不知道?那你還不搬個板凳,買包瓜子,仔細往下面看)常用的註解都看了一遍,現在分享給大家,希望大家不要犯和小黑一樣的錯誤。

lombok

首先,先和大家普及一下lombok(瞭解過的可以快進)的相關知識。

1 什麼是lombok

官方的介紹我就不復制了(是因為懶嗎),主要是以簡單的註解形式來簡化一些沒有技術含量並且又不得不寫的代碼,比如 get\\set ,構造方法等等,提高了代碼的簡潔性。

2 lombok的使用

lombok的使用非常簡單,只需要引入 jar 包,然後 idea 安裝一個 lombok 插件。

<code> <dependency>
<groupid>org.projectlombok/<groupid>
<artifactid>lombok/<artifactid>
<version>
/<dependency>
/<code>

version選擇最新的就可以了。idea 安裝插件就不介紹了,相信在座的各位都是大佬。

2.1 @Data

@Data註解在類上,會為類的所有屬性自動生成setter/getter、equals、canEqual、hashCodetoString方法。下面通過簡單的代碼看下效果:

<code>@Data
public class User {
private String name;
private Integer sex;
}
/<code>

現在看下編譯之後的 class 文件:

<code>public class User {
private String name;
private Integer sex;
public User() {
}
public String getName() {
return this.name;
}
public Integer getSex() {
return this.sex;
}
public void setName(final String name) {
this.name = name;

}
public void setSex(final Integer sex) {
this.sex = sex;
}
public boolean equals(final Object o) {
if (o == this) {
return true;
} else if (!(o instanceof User)) {
return false;
} else {
User other = (User)o;
if (!other.canEqual(this)) {
return false;
} else {
Object this$name = this.getName();
Object other$name = other.getName();
if (this$name == null) {
if (other$name != null) {
return false;
}
} else if (!this$name.equals(other$name)) {
return false;
}
Object this$sex = this.getSex();
Object other$sex = other.getSex();
if (this$sex == null) {
if (other$sex != null) {
return false;
}
} else if (!this$sex.equals(other$sex)) {
return false;
}
return true;
}
}
}
protected boolean canEqual(final Object other) {
return other instanceof User;
}
public int hashCode() {
int PRIME = true;
int result = 1;
Object $name = this.getName();
int result = result * 59 + ($name == null ? 43 : $name.hashCode());
Object $sex = this.getSex();
result = result * 59 + ($sex == null ? 43 : $sex.hashCode());
return result;
}
public String toString() {
return "User(name=" + this.getName() + ", sex=" + this.getSex() + ")";

}
}
/<code>

2.2 @Getter/@Setter

這個就不演示了,註解在類或字段上面,就是生成 get 和 set 方法,具體看 @Data 裡面生產的 get/set 方法。

2.3 @ToString

這個也不演示了,註解在類上面,生成 toString 方法。

2.4 @EqualsAndHashCode

這個也不演示了,註解在類上面,生成 hashCode 和 equals 方法。

2.5 @NoArgsConstructor

註解在類,生成無參的構造方法。這個看下生成的代碼,上面的代碼就是加了這個註解就可以了。

<code>public class User {
private String name;
private Integer sex;

public User() {
}
}
/<code>

2.6 @RequiredArgsConstructor

註解在類上,生成包含final和@NonNull註解的成員變量的構造器。

<code>public class User {
private String name;
private final Integer sex;


public User(final Integer sex) {
this.sex = sex;
}
}
/<code>

2.7 @AllArgsConstructor

註解在類,生成包含類中所有字段的構造方法。

<code>public class User {
private String name;
private final Integer sex;

public User(final String name, final Integer sex) {
this.name = name;
this.sex = sex;
}
}
/<code>

2.8 @Slf4j

這個也是用的比較多的,註解在類上,生成log常量

<code>public class User {
private static final Logger log = LoggerFactory.getLogger(User.class);
private String name;
private Integer sex;

public User() {
}
}
/<code>

3 Lombok的優缺點

  1. 優點:a. 能通過註解的形式自動生成構造器、getter/setter、equals、hashcode、toString等方法,提高了一定的開發效率。b. 讓代碼變得簡潔,不用過多的去關注相應的方法。c. 屬性做修改時,也簡化了維護為這些屬性所生成的getter/setter方法等。
  2. 缺點:a. 不支持多種參數構造器的重載。b. 雖然代碼變得簡潔,但也大大降低了代碼的可讀性和完整性。

4 總結

Lombok的這些知識點雖然簡單,但是用得好卻能大大的提高開發效率。不管別人用不用,反正早就開始用起來了。真香

一個小問題,卻讓瞭解了這麼多知識,果然有成為碼王的潛質。一定會努力學習,完成自己 目標。

好了,今天的分享就到這裡了,我們下期再見。喜歡的夥伴記的點個贊哦!愛你,麼麼噠!


分享到:


相關文章: