1. 程式人生 > >Eclipse安裝Lombok

Eclipse安裝Lombok

Lombok簡介

Lombok是一款好用順手的工具,就像Google Guava一樣,在此予以強烈推薦,每一個Java工程師都應該使用它。Lombok是一種Java™實用工具,可用來幫助開發人員消除Java的冗長程式碼,尤其是對於簡單的Java物件(POJO)。它通過註釋實現這一目的。通過在開發環境中實現Lombok,開發人員可以節省構建諸如hashCode()equals()這樣的方法以及以往用來分類各種accessormutator的大量時間。

安裝Lombok

雙擊Jar安裝

首先下載Jar包,下載地址:http://projectlombok.org/download.html



注意如果eclipse沒有安裝到預設目錄,那麼需要點選Specify選擇eclipse.exe所在的路徑,然後Install即可完成安裝。

在新建專案之後,使用Lombok如果程式還報錯,那麼點選eclipse選單的Project選項的clean,清理一下即可。

Eclipse手動安裝Lombok步驟

  • lombok.jar複製到myeclipse.ini/eclipse.ini所在的資料夾目錄下
  • 開啟eclipse.ini/myeclipse.ini,在最後面插入以下兩行並儲存:
    -Xbootclasspath/a:lombok.jar
    -javaagent:lombok.jar
  • 重啟eclipse/myeclipse

最後需要注意的是,在使用lombok註解的時候記得要匯入lombok.jar包到工程,如果使用的是Maven Project,要在pom.xml中新增依賴,並設定Maven為自動匯入,參見IntelliJ部分。

1
2
3
4
5
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.8</version>
</dependency>

IntelliJ安裝Lombok

通過IntelliJ的外掛中心安裝



注意一點,在IntelliJ中如果建立的是Maven專案,那麼在pom.xml檔案中新增依賴後,需要設定Maven為自動匯入。

IntelliJ手動安裝Lombok

簡單點說手動安裝步驟如下:
Download the latest release and install it manually using Preferences > Plugins > Install plugin from disk…

Lombok用法

Lombok註解說明

  • val:用在區域性變數前面,相當於將變數宣告為final
  • @NonNull:給方法引數增加這個註解會自動在方法內對該引數進行是否為空的校驗,如果為空,則丟擲NPE(NullPointerException)
  • @Cleanup:自動管理資源,用在區域性變數之前,在當前變數範圍內即將執行完畢退出之前會自動清理資源,自動生成try-finally這樣的程式碼來關閉流
  • @Getter/@Setter:用在屬性上,再也不用自己手寫setter和getter方法了,還可以指定訪問範圍
  • @ToString:用在類上,可以自動覆寫toString方法,當然還可以加其他引數,例如@ToString(exclude=”id”)排除id屬性,或者@ToString(callSuper=true, includeFieldNames=true)呼叫父類的toString方法,包含所有屬性
  • @EqualsAndHashCode:用在類上,自動生成equals方法和hashCode方法
  • @NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor:用在類上,自動生成無參構造和使用所有引數的建構函式以及把所有@NonNull屬性作為引數的建構函式,如果指定staticName = “of”引數,同時還會生成一個返回類物件的靜態工廠方法,比使用建構函式方便很多
  • @Data:註解在類上,相當於同時使用了@ToString@EqualsAndHashCode@Getter@Setter@RequiredArgsConstrutor這些註解,對於POJO類十分有用
  • @Value:用在類上,是@Data的不可變形式,相當於為屬性新增final宣告,只提供getter方法,而不提供setter方法
  • @Builder:用在類、構造器、方法上,為你提供複雜的builder APIs,讓你可以像如下方式一樣呼叫Person.builder().name("Adam Savage").city("San Francisco").job("Mythbusters").job("Unchained Reaction").build();更多說明參考Builder
  • @SneakyThrows:自動拋受檢異常,而無需顯式在方法上使用throws語句
  • @Synchronized:用在方法上,將方法宣告為同步的,並自動加鎖,而鎖物件是一個私有的屬性$lock$LOCK,而java中的synchronized關鍵字鎖物件是this,鎖在this或者自己的類物件上存在副作用,就是你不能阻止非受控程式碼去鎖this或者類物件,這可能會導致競爭條件或者其它執行緒錯誤
  • @Getter(lazy=true):可以替代經典的Double Check Lock樣板程式碼
  • @Log:根據不同的註解生成不同型別的log物件,但是例項名稱都是log,有六種可選實現類
    • @CommonsLog Creates log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);
    • @Log Creates log = java.util.logging.Logger.getLogger(LogExample.class.getName());
    • @Log4j Creates log = org.apache.log4j.Logger.getLogger(LogExample.class);
    • @Log4j2 Creates log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
    • @Slf4j Creates log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
    • @XSlf4j Creates log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);

Lombok使用示例

  • val示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    public static void main(String[] args) {
        val sets = new HashSet<String>();
        val lists = new ArrayList<String>();
        val maps = new HashMap<String, String>();
        //=>相當於如下
        final Set<String> sets2 = new HashSet<>();
        final List<String> lists2 = new ArrayList<>();
        final Map<String, String> maps2 = new HashMap<>();
    }
    
  • @NonNull示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    public void notNullExample(@NonNull String string) {
        string.length();
    }
    //=>相當於
    public void notNullExample(String string) {
        if (string != null) {
            string.length();
        } else {
            throw new NullPointerException("null");
        }
    }
    
  • @Cleanup示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    public static void main(String[] args) {
        try {
            @Cleanup InputStream inputStream = new FileInputStream(args[0]);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        //=>相當於
        InputStream inputStream = null;
        try {
            inputStream = new FileInputStream(args[0]);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
  • @Getter/@Setter示例

    1
    2
    3
    4
    
    @Setter(AccessLevel.PUBLIC)
    @Getter(AccessLevel.PROTECTED)
    private int id;
    private String shap;
    
  • @ToString示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    @ToString(exclude = "id", callSuper = true, includeFieldNames = true)
    public class LombokDemo {
        private int id;
        private String name;
        private int age;
    
        public static void main(String[] args) {
            //輸出LombokDemo([email protected], name=null, age=0)
            System.out.println(new LombokDemo());
        }
    }
    
  • @EqualsAndHashCode示例

    1
    2
    3
    4
    5
    
    @EqualsAndHashCode(exclude = {"id", "shape"}, callSuper = false)
    public class LombokDemo {
        private int id;
        private String shap;
    }
    
  • @NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    @NoArgsConstructor
    @RequiredArgsConstructor(staticName = "of")
    @AllArgsConstructor
    public class LombokDemo {
        @NonNull
        private int id;
        @NonNull
        private String shap;
        private int age;
        public static void main(String[] args) {
            new LombokDemo(1, "circle");
            //使用靜態工廠方法
            LombokDemo.of(2, "circle");
            //無參構造
            new LombokDemo();
            //包含所有引數
            new LombokDemo(1, "circle", 2);
        }
    }
    
  • @Data示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    import lombok.Data;
    @Data
    public class Menu {
        private String shopId;
        private String skuMenuId;
        private String skuName;
        private String normalizeSkuName;
        private String dishMenuId;
        private String dishName;
        private String dishNum;
        //預設閾值
        private float thresHold = 0;
        //新閾值
        private float newThresHold = 0;
        //總得分
        private float totalScore = 0;
    }
    

    在IntelliJ中按下Ctrl+F12就可以看到Lombok已經為我們自動生成了一系列的方法。

  • @Value示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    @Value
    public class LombokDemo {
        @NonNull
        private int id;
        @NonNull
        private String shap;
        private int age;
        //相當於
        private final int id;
        public int getId() {
            return this.id;
        }
        ...
    }
    
  • @Builder示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    @Builder
    public class BuilderExample {
        private String name;
        private int age;
        @Singular
        private Set<String> occupations;
        public static void main(String[] args) {
            BuilderExample test = BuilderExample.builder().age(11).name("test").build();
        }
    }
    
  • @SneakyThrows示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    import lombok.SneakyThrows;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.InputStream;
    import java.io.UnsupportedEncodingException;
    public class Test {
        @SneakyThrows()
        public void read() {
            InputStream inputStream = new FileInputStream("");
        }
        @SneakyThrows
        public void write() {
            throw new UnsupportedEncodingException();
        }
        //相當於
        public void read() throws FileNotFoundException {
            InputStream inputStream = new FileInputStream("");
        }
        public void write() throws UnsupportedEncodingException {
            throw new UnsupportedEncodingException();
        }
    }
    
  • @Synchronized示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    public class SynchronizedDemo {
        @Synchronized
        public static void hello() {
            System.out.println("world");
        }
        //相當於
        private static final Object $LOCK = new Object[0];
        public static void hello() {
            synchronized ($LOCK) {
                System.out.println("world");
            }
        }
    }
    
  • @Getter(lazy = true)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    public class GetterLazyExample {
        @Getter(lazy = true)
        private final double[] cached = expensive();
        private double[] expensive() {
            double[] result = new double[1000000];
            for (int i = 0; i < result.length; i++) {
                result[i] = Math.asin(i);
            }
            return result;
        }
    }
    

    相當於如下所示

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
    import java.util.concurrent.atomic.AtomicReference;
    public class GetterLazyExample {
        private final AtomicReference<java.lang.Object> cached = new AtomicReference<>();
        public double[] getCached() {
            java.lang.Object value = this.cached.get();
            if (value == null) {
                synchronized (this.cached) {
                    value = this.cached.get();
                    if (value == null) {
                        final double[] actualValue = expensive();
                        value = actualValue == null ? this.cached : actualValue;
                        this.cached.set(value);
                    }
                }
            }
            return (double[]) (value == this.cached ? null : value);
        }
        private double[] expensive() {
            double[] result = new double[1000000];
            for (int i = 0; i < result.length; i++) {
                result[i] = Math.asin(i);
            }
            return result;
        }
    }
    

相關推薦

Mac Eclipse安裝lombok

con force height 沒有 pri epo 引入 str maven   Lombok是一個可以通過註解的形式可以幫助消除一些必須但是顯得很臃腫的Java代碼的工具,通過使用對應的註解,可以在進行編譯源碼的時候生成對應的方法,比如類屬性的get/set/toSt

(轉) eclipse安裝lombok

truct index div str setting ins class boot 命令行 lombok的官方網址:http://projectlombok.org/ 1. lombok的安裝: 使用lombox是需要安裝的,如果不安裝,IDE則無法解析lombox註解,

mac 下eclipse安裝lombok外掛

下載 lombok.jar (https://projectlombok.org/download.html) 將 lombok.jar 放在eclipse安裝目錄下,和 eclipse.ini 檔案平級的。 這裡需要注意,mac作業系統下eclipse的安裝路徑下有兩個ecli

Mac 下eclipse安裝Lombok插件

jar macos .com oot ini web log tro tiff 在官網下載最新版本的 JAR 包。 將 lombok.jar 放在eclipse安裝目錄下,和 eclipse.ini 文件平級的。 註意,mac操作系統下eclipse的安裝路徑下有

Eclipse安裝lombok外掛

將lombok.jar檔案放入eclipse安裝目錄下(eclipse.exe同級),雙擊lombok.jar檔案,會自動掃描電腦裡面的eclipse檔案,選擇指定的安裝: 安裝速度超乎想象的快 之後就是三步:重啟Eclipse、重新整理專案、匯入J

eclipse安裝lombok或@Slf4j註解找不到log

一、第一種方法 2、找到eclipse安裝位置,將lombok.jar放入和eclipse.ini檔案平級的資料夾下,如我的安裝路徑: D:\eclipse2017\eclipse-jee-oxygen-R-win32-x86_64\eclipse 3

eclipse安裝lombok後無法啟動解決辦法

要想在eclipse安裝lombok外掛,需要將lombok相應的jar下載到eclipse安裝目錄,網上教程很多,這裡不在累贅,按照很多網上的方法安裝後eclipse可能會存在無法啟動的狀況,這裡我們需要開啟eclipse.ini檔案其改為如下即可

Eclipse安裝lombok及常用註解

lombok的官方網址:http://projectlombok.org/ 1. lombok的安裝: 使用lombox是需要安裝的,如果不安裝,IDE則無法解析lombox註解,有兩種方式

Eclipse安裝lombok,專案中所有get、set方法報錯

Lombok是能自動接通編輯器和構建工具的一個Java庫。最大的特點是不用再一次寫額外的getter或者equals方法。然而專案已經匯入了lombok-1.16.6.jar,仍然報錯,或者說lombok的jar包沒有生效,經過查閱資料才知道,是lombok外掛沒安裝,查詢其官網能看到安裝方

Eclipse安裝Lombok

Lombok簡介 Lombok是一款好用順手的工具,就像Google Guava一樣,在此予以強烈推薦,每一個Java工程師都應該使用它。Lombok是一種Java™實用工具,可用來幫助開發人員消除Java的冗長程式碼,尤其是對於簡單的Java物件(POJO)。它通過註釋實現這一目的。通過在開發環境中實

安裝lombok(eclipse)

src agen lips location title alt java 很多 size 下載 lombok.jar (https://projectlombok.org/download.html) 將 lombok.jar 放在eclipse安裝目錄下,和 ecli

MyEclipse2017/2018 , eclipse各個版本安裝 lombok

本文例項為 MyEclipse2018.9+lombok 1.18.2 第一步:下載lombok 推薦下載新版本:https://www.projectlombok.org/download 第二步:雙擊lombok.jar 第三步:選擇Specify Location

eclipse安裝lombok

lombok官網:https://projectlombok.org/  安裝lombok可以在實體類中通過註解的方式,不需要寫get和set方法,簡單方便 安裝lombok有倆種辦法 第一種 1.下載 lombok.jar  2.安裝  (1)將l

eclipse 離線安裝lombok外掛

確保你的機子上安裝了java runtime environment 沒有的話需要安裝一個,點選java runtime environment 可以下載,注意這裡還會附帶安裝一個jdk版本是1.8 你安裝了 java runtime environment 後,你的jdk 版

eclipse安裝lombok.jar

         操作完成後發現eclipse.ini多了一行配置            重啟eclipse並重新整理專案,之前報錯的set() get()等方法不再報錯。 複製lombok.jar到eclipse.ini所在目錄 安裝lombok.

安裝lombok後,eclipse不能自動生成getter和setter方法

原因: lombok版本問題,我安裝了lombok後,eclipse不能自動生成getter和setter方法,我替換了一下版本,換成了lombok v1.16.6,就可以了,具體安裝lombok的教程,參考我另一篇文章 http://blog.csdn.net/kingS

eclipse環境下如何手動安裝lombok詳解

lombok官網:https://projectlombok.org/ jar包下載路徑:https://projectlombok.org/download 安裝步驟 1.下載 lombok.jar 2.手動安裝 (1)將lombok.jar移到eclipse的安裝目錄 (2)在ec

Eclipse安裝lombok安裝及使用和原理

lombok:通過註解方式減少POJO類的getter和setter等方法來消除冗餘程式碼量 安裝 1.下載 lombok.jar 2.官網說是可以雙擊安裝,,,我用這種方法不可行 2.手動安裝 (1)將lombok.jar移到eclipse的安裝目錄 (2)在ecl

MAC版eclipseLombok外掛安裝

lombok官網 https://projectlombok.org/download.html1、官網下載最新lombok.jar2、安裝方式分為如下2種:    a、找到Eclipse.app下eclipse.ini中新增如下配置(lombok.jar的存放位置):   

eclipse安裝lombok外掛的問題

日常開發的過程中,難免會重複敲一些沒有什麼技術含量的程式碼,比如:生成實體類屬性的setter和getter方法,無參和有參構造方法,或者開發過程中增減屬性等,為了追求開發速度和效率,使用註解的方式代替