化繁為簡的lombok
阿新 • • 發佈:2018-08-29
加鎖 ins 化繁為簡 getname 階段 ron hashcode 發現 生存
眾所周知,Java語言是啰嗦的,寫久了就會發現很多地方的代碼看著就很冗余。lombok
提供了一種簡化Java代碼的解決方案,通過註解的方式,來生成模板化的代碼。最典型的就是生成類的構造函數,getter/setter,toString方法等。
註解是伴隨JDK5發布的一個feature,根據生存周期的不同,分為Source,Class(編譯階段)和RUNTIME。lombok提供的註解的存活周期是Class,也就是說會lombok的註解會被編譯器(javac)處理並翻譯成對應的字節碼。說穿了,lombok就像是一個職業寫手,按照定義幫你寫代碼。我們在寫代碼的時候通過lombok提供的註解,定義好文章的提綱,剩下的交給lombok,他會幫我們把文章(代碼)寫的有血有肉(構造函數,getter,setter等)。
下面是lombok提供的一些註解和作用:
@Getter
/@Setter
:根據fields創建getters和setters@EqualsAndHashCode
: 實現equals()
和hashcode()
@ToString
:實現toString()
@Data
: 包含上面的四個註解的功能@Cleanup
: 關閉打開的流@Synchronized
: 在對象上加鎖@SneakyThrows
: 捕獲未處理的異常
下面是一段使用lombok註解的代碼:
import lombok.Data; import java.util.Date; @Data public class Person { private String name; private Date birthday; private int gender; }
先編譯成字節碼:
javac -cp lombok-1.18.2.jar Person.java
通過javap看下生成的字節碼的內容:
~ lombok git:(master) ? javap Person.class Compiled from "Person.java" public class cc.databus.lombok.Person { // lombok生成的構造函數 public cc.databus.lombok.Person(); // 生成的getter和setter public java.lang.String getName(); public java.util.Date getBirthday(); public int getGender(); public void setName(java.lang.String); public void setBirthday(java.util.Date); public void setGender(int); // 生成的equals和hashcode public boolean equals(java.lang.Object); protected boolean canEqual(java.lang.Object); public int hashCode(); // 生成的toString public java.lang.String toString(); }
上面這是一個簡單的例子,更細節的使用可以參考lombok提供的註解列表。
如果在Intelij下開發,需要安裝lombok的一個插件,否則無法在intelij下運行和調試:
- 依次打開File > Settings > Plugins
- 選擇 Browse repositories...
- 搜索 Lombok Plugin
- 安裝插件
- 重啟IntelliJ IDEA
References
- lombok提供的註解列表
文章同步發布在我的個人博客上,歡迎拍磚。傳送門: 化繁為簡的lombok
化繁為簡的lombok