lombok深刻實踐

官網視頻

官網地址:https://projectlombok.orgjava

官網的首頁視頻演示在eclipse中如何使用Lombok;

Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java.
Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more.git

翻譯:github

Lombok項目是一個java的庫,能夠自動的經過插件的方式安裝到你的編輯器和構建工具中,給你的Java代碼調味,不再用寫 getter和equals方法了,經過一個類上的註解你擁有了建造者的特徵,自動的聲明瞭一個日誌變量,還有更多功能;

特徵列表

val

自由使用final本地變量;
從0.10版本開始引入
你能夠使用val做爲本地變量的申明,來替代寫它的實際類型。若是你這樣作了,類型將會從初始化表達式中被推斷,本地變量也會被設置爲final,這個特徵工做在以下場景:
1.本地變量;
2.foreach循環;
在類的成員中並不會生效,初始化表達式是須要的。
val其實是一個類型的排序,做爲一個真實的類存在於lombok的包中,你必須引入val才能工做(或者使用lombok.val做爲類型),在本地變量聲明中這種類型的存在會觸發兩個操做:
1.增長final關鍵字;
2.複製初始化表達式的類型,用來重寫這個僞造的val類型;
注意這個功能在netbeans中不會起做用;

注意事項:spring

對於混合的類型,會推斷獲得公共的父類,而不是共享的接口。
在含糊的場景下:若是初始化爲null,會推斷獲得Object.

實例代碼:不適用lombok;springboot

package com.springpractice._val;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

/**
 * Hello world!
 */
public class App {

    public String test1() {
        final ArrayList<String> exampleList = new ArrayList<>();
        exampleList.add("hello world");

        final String firstElement = exampleList.get(0);
        final String returnString = firstElement.toLowerCase();
        System.out.println(returnString);
        return returnString;
    }

    public void test2() {

        final HashMap<Integer, String> map = new HashMap<>();
        map.put(0, "zero");
        map.put(5, "five");

        for (final Map.Entry<Integer, String> entry : map.entrySet()) {
            System.out.printf("%d: %s \n", entry.getKey(), entry.getValue());
        }

    }


    public static void main(String[] args) {
        final App app = new App();
        app.test1();
        System.out.println("======");
        app.test2();

    }

}

使用lombok ;app

package com.springpractice._val;

import lombok.val;

import java.util.ArrayList;
import java.util.HashMap;

/**
 * Hello world!
 */
public class AppLombok {
         //不能使用在類的成員變量上,會報編譯錯誤
            // val String name;
    public String test1() {
        val exampleList = new ArrayList<String>();
        exampleList.add("hello world");

        val firstElement = exampleList.get(0);

        final String returnString = firstElement.toLowerCase();
        System.out.println(returnString);
        return returnString;
    }

    public void test2() {

        val map = new HashMap<Integer, String>();
        map.put(0, "zero");
        map.put(5, "five");

        for (val entry : map.entrySet()) {
            System.out.printf("%d: %s \n", entry.getKey(), entry.getValue());
        }

    }


    public static void main(String[] args) {
        final AppLombok app = new AppLombok();
        app.test1();
        System.out.println("======");
        app.test2();

    }
}

var

替代本地變量;
package com.springpractice._var;

import lombok.var;

import java.awt.*;

/**
 * 說明:var的使用
 * @author carter
 * 建立時間: 2019年10月10日 20:08
 **/

public class App {

    public static void main(String[] args) {

        var x = "Hello";

        //編譯報錯,類型是String
//        x=1;

        var y = Color.RED;

//        y=x;

        //var的類型若是是object ,則不是它的使用場景
        var z = new Object();

        z = x;

        System.out.println(x);

    }

}

NonNull

自動檢查,告別NPE的愛恨情仇。

不使用lombok;eclipse

package com.springpractice.nonnull;

import lombok.NonNull;

import java.util.Objects;

/**
 * 說明:TODO
 * @author carter
 * 建立時間: 2019年10月10日 20:16
 **/

public class App  extends Something{

    private String name;

    public App(Person person){
        super("Hello");
        if (Objects.isNull(person)){
            throw new NullPointerException("person is marked @NonNull but is null");
        }
        this.name = person.getName();

    }

    public static void main(String[] args) {
        new App(null);
    }

}

使用lombok;編輯器

package com.springpractice.nonnull;

import lombok.NonNull;

/**
 * 說明:TODO
 * @author carter
 * 建立時間: 2019年10月10日 20:20
 **/

public class AppLombok extends Something {

    private String name;

    public AppLombok(@NonNull Person person){
        super("Hello");
        this.name = person.getName();
    }

    public static void main(String[] args) {
        new AppLombok(null);
    }


}

效果同樣:ide

/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/bin/java -Dfile.encoding=UTF-8 -classpath /Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/lib/tools.jar:/Users/lifesense-szyf01/src/git/github/springbootpractice/lombok-demo/target/classes:/Users/lifesense-szyf01/.m2/repository/org/projectlombok/lombok/1.18.8/lombok-1.18.8.jar com.springpractice.nonnull.AppLombok
Exception in thread "main" java.lang.NullPointerException: person is marked non-null but is null
    at com.springpractice.nonnull.AppLombok.<init>(AppLombok.java:15)
    at com.springpractice.nonnull.AppLombok.main(AppLombok.java:21)

Process finished with exit code 1

代碼路徑: git@github.com:carterbrother/springbootpractice.git/lombok-demo工具

原創不易,轉載請註明出處,歡迎溝通交流。
相關文章
相關標籤/搜索