1. 程式人生 > >Lombok介紹及使用方法

Lombok介紹及使用方法

https://www.cnblogs.com/holten/p/5729226.html

lombok簡介

lombok是暑假來到公司實習的時候發現的一個非常好用的小工具,剛見到的時候就感覺非常驚豔,有一種相見恨晚的感覺,用了一段時間之後感覺的確挺不錯,所以特此來推薦一下。

那麼lombok到底是個什麼呢,lombok是一個可以通過簡單的註解的形式來幫助我們簡化消除一些必須有但顯得很臃腫的 Java 程式碼的工具,簡單來說,比如我們新建了一個類,然後在其中寫了幾個欄位,然後通常情況下我們需要手動去建立getter和setter方法啊,建構函式啊之類的,lombok的作用就是為了省去我們手動建立這些程式碼的麻煩,它能夠在我們編譯原始碼的時候自動幫我們生成這些方法。

lombok能夠達到的效果就是在原始碼中不需要寫一些通用的方法,但是在編譯生成的位元組碼檔案中會幫我們生成這些方法,這就是lombok的神奇作用。

雖然有人可能會說IDE裡面都自帶自動生成這些方法的功能,但是使用lombok會使你的程式碼看起來更加簡潔,寫起來也更加方便。

lombok安裝

lombok的安裝跟一般引用jar包沒有什麼區別,可以到官網上下載最新的jar包,然後匯入到專案裡面就好啦。

Maven新增依賴

<dependencies>
    <dependency>
        <groupId>org.projectlombok</groupId
>
<artifactId>lombok</artifactId> <version>1.16.10</version> </dependency> </dependencies>

Intellij idea開發的話需要安裝Lombok plugin,同時設定 Setting -> Compiler -> Annotation Processors -> Enable annotation processing勾選。

lombok使用

lombok使用過程中主要是靠註解起作用的,官網上的文件裡面有所有的註解,這裡不一一羅列,只說明其中幾個比較常用的。

@NonNull: 可以幫助我們避免空指標。

使用lombok:

import lombok.NonNull;
    public class NonNullExample extends Something {
        private String name;  
        publicNonNullExample(@NonNull Person person) {
        super("Hello");
        this.name = person.getName();
    }
}

不使用lombok:

public class NonNullExample extends Something {
    private String name;  
    publicNonNullExample(@NonNull Person person) {
        super("Hello");
        if (person == null) {
            throw new NullPointerException("person");
        }
        this.name = person.getName();
    }
}

@Cleanup: 自動幫我們呼叫close()方法。

使用lombok:

import lombok.Cleanup;
import java.io.*;
public class CleanupExample {
    publicstaticvoidmain(String[] args) throws IOException {
        @Cleanup InputStream in = new FileInputStream(args[0]);
        @Cleanup OutputStream out = new FileOutputStream(args[1]);
        byte[] b = new byte[10000];
        while (true) {
            int r = in.read(b);
            if (r == -1) break;
            out.write(b, 0, r);
        }
    }
}

不使用lombok:

import java.io.*;
    public class CleanupExample {
        publicstaticvoidmain(String[] args) throws IOException {
            InputStream in = new FileInputStream(args[0]);
            try {
                OutputStream out = new FileOutputStream(args[1]);
                try {
                    byte[] b = new byte[10000];
                    while (true) {
                    int r = in.read(b);
                    if (r == -1) break;
                    out.write(b, 0, r);
                    }
                } finally {
                    if (out != null) {
                        out.close();
                    }
                }
            } finally {
                if (in != null) {
                in.close();
            }
        }
    }
}

@Getter / @Setter: 自動生成Getter/Setter方法

使用lombok:

    import lombok.AccessLevel;
    import lombok.Getter;
    import lombok.Setter;
    public class GetterSetterExample {
        @Getter @Setter private int age = 10;
        @Setter(AccessLevel.PROTECTED) private String name;
    }

不使用lombok:

public class GetterSetterExample {
    private int age = 10;
    private String name;
    publicintgetAge() {
        return age;
    }
    publicvoidsetAge(int age) {
        this.age = age;
    }
    protectedvoidsetName(String name) {
        this.name = name;
    }
}

@NoArgsConstructor: 自動生成無引數建構函式。

@AllArgsConstructor: 自動生成全引數建構函式。

@ToString

生成toString()方法,預設情況下,它會按順序(以逗號分隔)列印你的類名稱以及每個欄位。可以這樣設定不包含哪些欄位@ToString(exclude = "id") / @ToString(exclude = {"id","name"}) 如果繼承的有父類的話,可以設定callSuper 讓其呼叫父類的toString()方法,例如:@ToString(callSuper = true)

import lombok.ToString;
@ToString(exclude = {"id","name"})
public class User {
  private Integer id;
  private String name;
  private String phone;
}

還有其他一些比如自動生成日誌物件等等之類的註解可以到官方網站去了解,就不一一列舉了。