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;  
        public NonNullExample(@NonNull Person person) {
        super("Hello");
        this.name = person.getName();
    }
}

不使用lombok:

public class NonNullExample extends Something {
    private String name;  
    public NonNullExample(@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 {
    public static void main(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 {
        public static void main(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;
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    protected void setName(String name) {
        this.name = name;
    }
}

@NoArgsConstructor: 自動生成無參數構造函數。

@AllArgsConstructor: 自動生成全參數構造函數。

@Data: 自動爲所有字段添加@ToString, @EqualsAndHashCode, @Getter方法,爲非final字段添加@Setter,和@RequiredArgsConstructor!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章