Lombok的基本用法

一、引入lombok

      <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.4</version>
            <scope>provided</scope>
        </dependency>

IDEA還需要下載lombok插件。

二、lombok的使用

1.@Data
@Data
public class Student {

    private String name;

    private Integer age;
}

@Data的功能很強大:

        /**
         * @Data
         * 會為類的所有屬性自動生成setter/getter、equals、canEqual、hashCode、toString方法,如為final屬性,則不會為該屬性生成setter方法
         */
        Student student = new Student();
        student.setAge(18);
        student.setName("yunmuzhou");
        //從日志中可以看出,toString()已經(jīng)被重寫
        log.info("@Data:" + student);

輸出日志:

@Data:Student(name=yunmuzhou, age=18)

2.@Getter & @Setter
public class Person {

    @Getter
    @Setter
    private String name;

    @Getter
    @Setter
    private Integer age;
}

但是借助于Lombok,一切都變得優(yōu)雅起來,代碼篇幅省了一半

        /**
         * @Getter
         * @Setter
         * 省去了寫getter(),setter()方法
         */
        Person person = new Person();
        person.setAge(10);
        person.setName("ymz");
        log.info("@Getter age :" + person.getAge() + ",@Getter name : " + person.getName());

輸出結(jié)果:

@Getter age :10,@Getter name : ymz

3.@Builder
@Data
@Builder
public class Man {

    private String name;

    private String sex;
}

new對象變得優(yōu)雅了:

        /**
         * @Builder
         * 鏈式編程,很方便的創(chuàng)建一個新的對象 =====(以build()方法結(jié)尾) ====
         *
         * 1.構(gòu)造一個空對象
         * 2.構(gòu)造一個對象并初始化
         */
        Man man01 = Man.builder().build();
        Man man02 = Man.builder().name("ymz").sex("male").build();
        log.info("man01 : " + man01);
        log.info("man02 : " + man02);

輸出結(jié)果:

man01 : Man(name=null, sex=null)
man02 : Man(name=ymz, sex=male)

4.@AllArgsConstructor & @NoArgsConstructor & @RequiredArgsConstructor
@Data
//@AllArgsConstructor
//@NoArgsConstructor
@RequiredArgsConstructor
public class Human {

    private String name;

    private String sex;

    private final String address;
}
        /**
         * @AllArgsConstructor 全參數(shù)構(gòu)造
         * 構(gòu)建一個全部參數(shù)的構(gòu)造方法
         */
        //Human man = new Human();
        /**
         * @NoArgsConstructor 無參數(shù)構(gòu)造
         * 構(gòu)建一個無參構(gòu)造
         */
        Human man = new Human();
        /**
        * 構(gòu)建一個只包含final修飾的構(gòu)造方法
        */
        Human man = new Human("浙江");
5.@NonNull

優(yōu)雅的進行null判斷:

   public static void testNonNull(@NonNull String name){
        log.info(name);
   }

測試一下:

testNonNull(null);

結(jié)果:

Exception in thread "main" java.lang.NullPointerException: name is marked non-null but is null
6.很方便的關(guān)閉流stream

假如我們要讀取一個文檔,一般會這樣操作:

image.png

注意,這個文件句柄在使用完成之后是一定要手動 close的,否則就有可能資源泄漏。
有了Lombok之后,這種擦屁股活兒統(tǒng)統(tǒng)不用干了,一個 @Cleanup注解即可搞定
image.png

7.異常捕捉的便捷性

比如我們打開一個 txt文本文件:

image.png

這地方的 FileNotFoundException異常,要么顯式地在函數(shù)級拋出,要么就像上面一樣 try/catch內(nèi)部消滅。
如果在編碼時,不想處理這種繁雜的異常處理,你可以使用Lombok的 @SneakyThrows注解進行簡化,比如上面的代碼就可以簡化為:
image.png

必須友情提示的是:這樣寫你是爽了,但你很有可能會被隊友一頓暴打,因為別人調(diào)用你編寫的函數(shù),并不能顯式的獲知需要處理哪些異常,這樣容易留坑!
好了,受限于篇幅限制,拋磚引玉就到這里了。
上面列舉了幾個平時項目開發(fā)中使用非常頻繁的Lombok注解,除此之外,還有諸如像:

  • @ToString:為類自動生成toString()方法
  • @EqualsAndHashCode:為類自動生成hashCode和equals實現(xiàn)
  • @Log:為類自動生成log日志記錄
  • @Synchronized:為類方法或?qū)嵗椒ㄗ詣由蓅ynchronized保護
    等工具也是非常好用的,大家可以嘗試在項目里用起來。
    從此,代碼5分鐘,劃水2小時不是夢。。。
    部分內(nèi)容引用來源CodeSheep
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容