Lombok pojo類小神器

前言

Lombok主頁html

Lombok下載

Lombok引入項目以後,即可以使用 本文記錄了在項目中應用Lombok時的使用案例,但願對朋友你有一些幫助。java

  1. 能夠去 下載jar包安全

  2. maven:eclipse

    <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
     <dependency>
         <groupId>org.projectlombok</groupId>
         <artifactId>lombok</artifactId>
         <version>1.16.10</version>
     </dependency>
  3. gradle:maven

    // https://mvnrepository.com/artifact/org.projectlombok/lombok
    compile group: 'org.projectlombok', name: 'lombok', version: '1.16.10'

目前最新版本爲1.16.10。工具

初學Lombok的使用時,建議配合Java的編譯工具,便於理解Lombok在背後作的事情。性能


Lombok 安裝

使用 lombok 是須要安裝的,若是不安裝,IDE 則沒法解析 lombok 註解。先在官網下載最新版本的 JAR 包。gradle

第一次使用的時候我下載的是最新版本的,也就是我如今用的1.16.10 目前版本更新很快。spa

1.雙擊下載下來的 JAR 包安裝 lombok調試

我選擇這種方式安裝的時候提示沒有發現任何 IDE,因此我沒安裝成功,我是手動安裝的。若是你想以這種方式安裝,請參考官網的視頻。

2.eclipse 手動安裝 lombok
(1). 將 lombok.jar 複製到eclipse.ini 所在的文件夾目錄下
(2). 打開 eclipse.ini,在最後面插入如下兩行並保存:

-Xbootclasspath/a:lombok.jar
-javaagent:lombok.jar

(3).重啓 eclipse


Lombok好處在哪裏?

沒使用Lombok以前,定義JavaBean時,須要爲每一個成員定義getter/setter方法,不管手寫或者自動生成,過程都不麻煩,但當Bean裏的成員蠻多時,看代碼的時候就比較心煩,無關的部分愈來愈多。隨着項目的成長,代碼的行數也奇蹟般的增加,以致於項目經理在評估工做量時都要考慮適時的調整比率,麻煩呀。

@Data註解

經過在在class關鍵字前增長@Data,Lombok除了自動生成全部非final成員的getter/setter方法外,還有額外的福利,lombok同時生成了toString、equals、hashCode方法,而且徹底符合規範,這樣縮減了代碼的規模,也少了手寫toString/equals/hashCode方法的煩惱。

@Data
    class Person
    {
        private String name;
        private int age;
        private String job;
        private Object info;
    }

@ToString註解

在調試代碼時常常遇到一個問題,查看某個變量的值時,發現變量窗口展現的是一個奇怪的值(或者說對象在JVM內部表示的地址,這實際上是toString方法的默認實現);想要查看對象內部各成員的值就須要逐層展開,這樣才能看到內部的信息。相似的調試過程煩不勝煩,但對於定義了合適的toString方法的類的對象,調試時查看其內部成員的值則會簡單許多,調試器會自動調用對象的toString方法,並將獲得的字符串展現在變量值窗口,這無疑爲調試帶來了莫大便利。但手寫toString方法其實很是麻煩,有過相關經歷的朋友可能會深有體會。對於某個具體的類來講,出於安全或者性能或者其它方面的考慮,可能並不但願所有成員都出如今toString方法的返回值裏。

@ToString(exclude = { "age", "job" }, includeFieldNames = false, doNotUseGetters = true)  
    class Staff  
    {  
        private String name;  
        private int age;  
        private String job;  
        private Object info;  
    }  
      
    @ToString(callSuper = false)  
    class Student extends Staff  
    {  
        private String schoolName;  
        private int classNo;  
    }

@EqualsAndHashCode

在項目開發過程當中,雖然場景比較少,但仍然不可避免存在須要自定義equals或者hashCode方法的時候,固然這也是頭疼的時候。根據《Effective Java》中的建議,equals方法和hashCode方法要同時實現,而且保證一致性。Lombok提供的@EqualsAndHashCode完美的解決了手寫equals和hashCode方法時遇到的所有問題,不須要刻意關注底層的實現細節

@EqualsAndHashCode(exclude = { "age", "job" }, doNotUseGetters = true)  
    class Staff  
    {  
        private String name;  
        private int age;  
        private String job;  
        private Object info;  
    }  
      
    @EqualsAndHashCode(callSuper = false)  
    class Student extends Staff  
    {  
        private String schoolName;  
        private int classNo;  
    }

@Getter和@Setter

經過這兩個註解,能夠靈活控制是否爲字段提供getter/settere方法,以及getter/setter方法的訪問權限。因爲使用很是簡單,之後就不用看到一大堆的get set 囉。

class Person
    {  
        @Getter  
        @Setter  
        private String name;  
      
        @Getter  
        private String schoolName;  
      
        @Setter  
        private int classNo;  
      
        @Getter(AccessLevel.MODULE)  
        private int age;  
      
        @Getter(AccessLevel.NONE)  
        private String job;  
      
        @Getter(AccessLevel.PRIVATE)  
        private Object info;  
    }
相關文章
相關標籤/搜索