茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1671806 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
F09_060.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

爪哇咖啡屋 : [轉貼]Lombok

發表者 討論內容
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]Lombok

Lombok 簡介


Lombok 包提供了簡單的標注來幫助我們簡化消除一些必須有但是臃腫的java 代碼,比如getter、setter和構造函數等,這些函數一般我們通過IDE自動生成,有了lombok三兩個標注就輕鬆搞定。

為了讓Eclipse識別lombok,除了引入lombok JAR包之外,你需要安裝lombok,這樣Eclipse才不會報警告(否則即使你標注了@Data,如果你不寫setter和getter代碼的話,Eclipse會有警告)。安裝非常簡單,只需要到lombok網站中下載,然後雙擊Jar包運行即可。

安裝說明
[安裝]

安裝步驟:
#下載 lombok.jar ( lombok官網
#安裝 lombok
#重啓 eclipse
https://ithelp.ithome.com.tw/upload/images/20180104/20107621uz0KWVchTh.png



檢查:
You can check if your eclipse installation is lombok-enabled in eclipse's about dialog. The lombok version will be listed at the end of the copyright text

https://ithelp.ithome.com.tw/upload/images/20180104/20107621zv9fw8i8bQ.png


Eclipse 啟動後如果還在錯誤訊息,則點擊在 eclipse的Project 選項的 clean
https://ithelp.ithome.com.tw/upload/images/20180104/20107621upzdLvP9M4.png

[使用]

Maven


<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.16</version>
<scope>provided</scope>
</dependency>
</dependencies>


Lombok 的特色是根據 annotation 創建一些程式碼,以減少重復程式碼的數量,它提供了以下幾個 annotation:


@Getter 和 @Setter:為屬性創建 getter 和 setter
@EqualsAndHashCode:實現 equals() 方法和 hashCode() 方法
@ToString:實現 toString() 方法
@Data:上述3個 annotation 的和,會創建 getter setter equals hashCode 和 toString (最實用)
@Cleanup:關閉流
@Synchronized:對象同步
@SneakyThrows:拋出異常
@Log4j: log4j 日誌聲明


@ToString(exclude="color")
public @Data class Lure {
private String name;
private int size;
private String color;
private String style;
private boolean flag;
}

@Data 是實現所有的成員的 Get 和 Set 方法
@ToString(exclude="color")是 ToString 時候排除 color 成員變量
注意調用 flag 成員變量時候,是 isFlag 方法

What is POJO


POJO 是這樣的一種「純粹的」JavaBean,在它裡面除了JavaBean 規範的方法和屬性沒有別的東西,即 private 屬性以及對這個屬性方法的 public 的 get 和set 方法。我們會發現這樣的 JavaBean 很「單純」,它只能裝載數據,作為數據存儲的載體,而不具有業務邏輯處理的能力。
所以下面的代碼被認為是 POJO 了。

在一個 POJO


public  class User {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}


使用後,程式碼可以變成這樣


import lombok.Getter;
import lombok.Setter;
public class User {
@Getter @Setter
private int id;
@Getter @Setter
private String name;
}


甚至...再簡化成這樣


import lombok.Data;
public @Data class User {
private int id;
private String name;
}


資源


[1] Lombok 安裝、入門 - 消除冗長的 java 代碼
[2] [Mac OS] Setup lombok in Eclipse(Neon.2)



原文出處: IT|軟體|開發|Lombok @Data - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]五分鐘學會 Lombok 用法

Java - 五分鐘學會 Lombok 用法

By Kucw 2020/03/04 Java

Lombok 是一個 Java library,可以透過簡單的注解省略 Java 的 code,像是 setter、getter、logger…等,目的在消除冗長的 code 和提高開發效率

假設你在類上加上了一個 @Getter@Setter 注解,那你就不用在寫煩人的 getter 和 setter,lombok 會自動幫你產生出來啦!

之所以加個 lombok 的 @Getter 注解就可以幫我們自動生成所有變量的 getter,是因為 lombok 參與了 Java 在 compile 階段生成 .class 檔的過程,lombok 會幫我們自動寫一堆 getter,然後塞進 .class 檔,所以真正被編譯出來的 User.class 檔案,是包含完整的 getter 的

簡單的說,lombok可以算是一種語法糖,只是在幫我們增進開發效率而已,實際上所產生出來的 .class檔仍然是完全正常的

安裝 Lombok

要在 project 中使用 lombok,除了要在 maven 中加入 lombok dependency,還要安裝 Intellij lombok 插件

1. 加入maven dependency


<dependency>
</groupId>
</artifactId>
</version>
</dependency>

2. 在 Intellij 中安裝 lombok 插件

我使用的 Intellij 版本是 2019.3.3,可能會因為版本差異導致安裝方式有改變

先點選左上角 Intellij IDEA -> Preferences

然後點擊左邊的Plugins,再點擊上面的Marketplace tab,然後就可以在搜尋欄中輸入 lombok,並且找到lombok插件並安裝它

為什麼需要特地安裝 Intellij lombok 插件?

其實在 maven 加入 lombok dependency 之後,使用 mvn clean package 就可以正常 build 過,在 Intellij 中點擊綠色按鈕也可以運行程式

之所以還要特地安裝 Intellij lombok 插件,是因為如果不安裝 lombok 插件的話,Intellij 就會沒辦法自動提示出 lombok 產生的方法,所以就會發生你的 code 一片紅,但是運行卻可以通過的奇妙現象

像是下面這段 code 中,因為對 Intellij 來說,code 裡並不存在 setter,所以沒辦法自動提示 setId()setName() 等方法,但是又因為我們在maven中有加入 lombok dependency,所以點擊第 13 行的綠色箭頭運行程式的話,是可以正常運行成功的


所以 lombok 算侵入性很高的一個 library,只要團隊中有一個人用 lombok 開發,那麼所有的人都必須得安裝上 lombok 插件,才不會在 Intellij 中一打開 project 時,整片都是痛苦的紅字

Lombok 用法

lombok 官網提供了許多注解,但是「勁酒雖好,可不能貪杯」,你用了越多 lombok 的進階用法,會讓整個團隊的學習曲線上升,反而會造成反效果,所以在此處只解釋最最常見、並且我認為最必要的注解使用方式,其他的用法就不介紹了

1. @Getter/@Setter

自動產生 getter/setter

2. @ToString

自動 override toString() 方法,會印出所有變量

3. @EqualsAndHashCode

自動生成 equals(Object other)hashcode() 方法,包括所有非靜態變量和非 transient 的變量

如果某些變量不想要加進判斷,可以透過 exclude 排除,也可以使用 of 指定某些字段


Q : 為什麼只有一個整體的 @EqualsAndHashCode 注解,而不是分開的兩個 @Equals@HashCode

A : 在 Java 中有規定,當兩個 object equals 時,他們的 hashcode 一定要相同,反之,當 hashcode 相同時,object 不一定 equals。所以 equals 和 hashcode 要一起 implement,免得發生違反 Java 規定的情形發生

4. @NoArgsConstructor, @AllArgsConstructor, @RequiredArgsConstructor

這三個很像,都是在自動生成該類的 constructor,差別只在生成的 constructor 的參數不一樣而已

@NoArgsConstructor : 生成一個沒有參數的constructor

@AllArgsConstructor : 生成一個包含所有參數的 constructor


這裡注意一個 Java 的小坑,當我們沒有指定 constructor 時,Java compiler 會幫我們自動生成一個沒有任何參數的 constructor 給該類,但是如果我們自己寫了 constructor 之後,Java 就不會自動幫我們補上那個無參數的 constructor 了

然而很多地方(像是 Spring Data JPA),會需要每個類都一定要有一個無參數的 constructor,所以你在加上 @AllArgsConstructor 時,拜託,一定要補上 @NoArgsConstrcutor,不然會有各種坑等著你


@AllArgsConstructor
@NoArgsConstructor
{
;
;
}

@RequiredArgsConstructor : 生成一個包含 “特定參數” 的 constructor,特定參數指的是那些有加上 final 修飾詞的變量們

補充一下,如果所有的變量都是正常的,都沒有用 final 修飾的話,那就會生成一個沒有參數的 constructor

5. @Data

懶人包,只要加了 @Data 這個注解,等於同時加了以下注解

  • @Getter/@Setter
  • @ToString
  • @EqualsAndHashCode
  • @RequiredArgsConstructor

@Data 是使用頻率最高的lombok注解,通常 @Data 會加在一個值可以被更新的 Object 上,像是日常使用的 DTO 們、或是 JPA 裡的 Entity 們,就很適合加上 @Data 注解,也就是 @Data for mutable class

6. @Value

也是懶人包,但是他會把所有的變量都設成 final 的,其他的就跟 @Data 一樣,等於同時加了以下注解

  • @Getter (注意沒有setter)
  • @ToString
  • @EqualsAndHashCode
  • @RequiredArgsConstructor


上面那個 @Data 適合用在 POJO 或 DTO 上,而這個 @Value 注解,則是適合加在值不希望被改變的類上,像是某個類的值當創建後就不希望被更改,只希望我們讀它而已,就適合加上 @Value 注解,也就是 @Value for immutable class

另外注意一下,此 lombok 的注解 @Value 和另一個 Spring 的注解 @Value 撞名,在 import 時不要 import 錯了

7. @Builder

自動生成流式 set 值寫法,從此之後再也不用寫一堆 setter 了

注意,雖然只要加上 @Builder 注解,我們就能夠用流式寫法快速設定 Object 的值,但是 setter 還是必須要寫不能省略的,因為 Spring 或是其他框架有很多地方都會用到 Object 的 getter/setter 對他們取值/賦值

所以通常是 @Data 和 @Builder 會一起用在同個類上,既方便我們流式寫 code,也方便框架做事


@Data
@Builder
{
;
;
}

8. @Slf4j

自動生成該類的 log 靜態常量,要打日誌就可以直接打,不用再手動 new log 靜態常量了

除了 @Slf4j 之外,lombok 也提供其他日誌框架的變種注解可以用,像是 @Log、@Log4j…等,他們都是幫我們創建一個靜態常量 log,只是使用的 library 不一樣而已


//對應的log語句如下
());
//對應的log語句如下
);

SpringBoot默認支持的就是 slf4j + logback 的日誌框架,所以也不用再多做啥設定,直接就可以用在 SpringBoot project上,log 系列注解最常用的就是 @Slf4j


原文出處: Java - 五分鐘學會 Lombok 用法
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]Lombok 套件安裝與使用指南

[推薦] Lombok 套件安裝與使用指南

辛比   

開發 Java 專案的時候,時常在寫像是 POJO、DTO 與 DAO … 等物件的時候,都要為每一個參數寫上基本的 Getter 與 Setter,雖然些 IDE 可以用點選的方式產生,但是只能夠一個一個參數產生還是有點麻煩,而如果使用了 Lombok Library 的話,可以不用自己寫,只需要在 class 上標示 Annotation 就可以,對於程式碼也能更簡潔,本篇將接學如何開始使用 Lombok。

官方網站: https://projectlombok.org/

原始碼:
https://github.com/rzwitserloot/lombok

安裝 IDE 套件

首先要安裝套件,如果沒有安裝套件的話,IDE會無法找到對應產生的函數而顯示錯誤,請依照自己使用的 IDE 是 Eclipse 或是 IntelliJ IDEA 來安裝

IntelliJ IDEA 安裝外掛

點選單中的 「Preferences…」 (如果是 Windows 或 Linux 則是 Setting)

到 Plugins 搜尋 lombok 並安裝

接著在Build Extension Deployment -> Compiler -> Annotation Process 中勾選 「Enable annotation processing」

Eclipse 安裝外掛

首先到 Lombok 網站上下載外掛: https://projectlombok.org/download

接著使用指令啟動 (或透過點擊兩下啟動)

java -jar lombok.jar

會跑出安裝視窗,它會偵測目前安裝的Eclipse的位置,點右 邊方的「Install / Update」

顯示 Install successful 便表示安裝完成

安裝中加入 Lombok Library

如果是使用 Maven,在 pom.xml 加入:


<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
</dependencies>

而如果是使用 Gradle,在 build.gradle 中加入:


repositories {
mavenCentral()
}
dependencies {
compileOnly 'org.projectlombok:lombok:1.18.12'
annotationProcessor 'org.projectlombok:lombok:1.18.12'
testCompileOnly 'org.projectlombok:lombok:1.18.12'
testAnnotationProcessor 'org.projectlombok:lombok:1.18.12'
}

使用 Lombok 的 @Annotation


下面介紹幾個較常使用的 @Annotation,這邊使用一個範例 class Student 來介紹各 Annotation 功能


public class Student {
private String studentId;
private String name;
private Integer age;
}

@Getter/@Setter


為該參數生出基本的 Getter 與 Setter 函數

例如下面的會生出 getStudentId()setStudentId(String studentId)


public class Student {
@Getter
@Setter
private String studentId;
private String name;
private Integer age;
}

@ToString


會蓋過原本的 toString() 函數,輸出結果會是所有參數的資料


@ToString
public class Student {
private String studentId;
private String name;
private Integer age;
}

@EqualsAndHashCode


會產生 equals 與 hashCode 兩個函數,可用來比較兩個相同物件內的所有成員變數是否相同


@EqualsAndHashCode
public class Student {
private String studentId;
private String name;
private Integer age;
}

@NoArgsConstructor, @AllArgsConstructor


參生建構元,分別為無參數建構元,帶有全參數的建構元


@NoArgsConstructor
@AllArgsConstructor
public class Student {
private String studentId;
private String name;
private Integer age;
}

@Data


這會直接為這個 class 加上上 @ToString, @EqualsAndHashCode, @Getter, @Setter 以及 @RequiredArgsConstructor 的 Annotation


@Data
public class Student {
private String studentId;
private String name;
private Integer age;
}

@Builder


產生 builder 函數,使物件可以使用流式接口 (fluent interface) 的方式代替傳統的建構元。


@Builder
public class Student {
private String studentId;
private String name;
private Integer age;
}

這樣就可以使用這樣的方式產生物件


Student student = Student.builder()
.studentId("K129132")
.name("Bob")
.age(20)
.build();


原文出處: [推薦] Lombok 套件安裝與使用指南 | 辛比誌
前一個主題 | 下一個主題 | 頁首 | | |



Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|