1. 程式人生 > >化繁為簡的lombok

化繁為簡的lombok

加鎖 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下運行和調試:

  1. 依次打開File > Settings > Plugins
  2. 選擇 Browse repositories...
  3. 搜索 Lombok Plugin
  4. 安裝插件
  5. 重啟IntelliJ IDEA

References

  1. lombok提供的註解列表

文章同步發布在我的個人博客上,歡迎拍磚。傳送門: 化繁為簡的lombok

化繁為簡的lombok