Lombok 使用小結

Lombok 使用小結

  • Lombok 簡介
  • Lombok 安裝
  • Lombok 使用
    • API
    • 示例
  • 示例源碼
  • 引用和引申

Lombok 簡介

Lombok 是一種 Java 實用工具,可用來幫助開發人員消除 Java 的冗長,尤其是對于簡單的 Java 對象(POJO)。它通過注釋實現這一目的。通過在開發環境中實現 Lombok,開發人員可以節省構建諸如 hashCode()equals()getter / setter 這樣的方法以及以往用來分類各種 accessor 和 mutator 的大量時間。

Lombok 安裝

使 IntelliJ IDEA 支持 Lombok 方式如下:

(1)Intellij 設置支持注解處理

點擊 File > Settings > Build > Annotation Processors

勾選 Enable annotation processing

(2)安裝插件

點擊 Settings > Plugins > Browse repositories

查找 Lombok Plugin 并進行安裝

重啟 IntelliJ IDEA

(3)將 lombok 添加到 pom 文件

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.8</version>
</dependency>

Lombok 使用

API

Lombok 提供注解 API 來修飾指定的類:

@Getter and @Setter

@Getter and @Setter Lombok 代碼:

@Getter @Setter private boolean employed = true;
@Setter(AccessLevel.PROTECTED) private String name;

等價于 Java 源碼:

private boolean employed = true;
private String name;public boolean isEmployed() {return employed;
}public void setEmployed(final boolean employed) {this.employed = employed;
}protected void setName(final String name) {this.name = name;
}

@NonNull

@NonNull Lombok 代碼:

@Getter @Setter @NonNull
private List<Person> members;

等價于 Java 源碼:

@NonNull
private List<Person> members;public Family(@NonNull final List<Person> members) {if (members == null) throw new java.lang.NullPointerException("members");this.members = members;
}@NonNull
public List<Person> getMembers() {return members;
}public void setMembers(@NonNull final List<Person> members) {if (members == null) throw new java.lang.NullPointerException("members");this.members = members;
}

@ToString

@ToString Lombok 代碼:

@ToString(callSuper=true,exclude="someExcludedField")
public class Foo extends Bar {private boolean someBoolean = true;private String someStringField;private float someExcludedField;
}

等價于 Java 源碼:

public class Foo extends Bar {private boolean someBoolean = true;private String someStringField;private float someExcludedField;@java.lang.Overridepublic java.lang.String toString() {return "Foo(super=" + super.toString() +", someBoolean=" + someBoolean +", someStringField=" + someStringField + ")";}
}

@EqualsAndHashCode

@EqualsAndHashCode Lombok 代碼:

@EqualsAndHashCode(callSuper=true,exclude={"address","city","state","zip"})
public class Person extends SentientBeing {enum Gender { Male, Female }@NonNull private String name;@NonNull private Gender gender;private String ssn;private String address;private String city;private String state;private String zip;
}

等價于 Java 源碼:

public class Person extends SentientBeing {enum Gender {/*public static final*/ Male /* = new Gender() */,/*public static final*/ Female /* = new Gender() */;}@NonNullprivate String name;@NonNullprivate Gender gender;private String ssn;private String address;private String city;private String state;private String zip;@java.lang.Overridepublic boolean equals(final java.lang.Object o) {if (o == this) return true;if (o == null) return false;if (o.getClass() != this.getClass()) return false;if (!super.equals(o)) return false;final Person other = (Person)o;if (this.name == null ? other.name != null : !this.name.equals(other.name)) return false;if (this.gender == null ? other.gender != null : !this.gender.equals(other.gender)) return false;if (this.ssn == null ? other.ssn != null : !this.ssn.equals(other.ssn)) return false;return true;}@java.lang.Overridepublic int hashCode() {final int PRIME = 31;int result = 1;result = result * PRIME + super.hashCode();result = result * PRIME + (this.name == null ? 0 : this.name.hashCode());result = result * PRIME + (this.gender == null ? 0 : this.gender.hashCode());result = result * PRIME + (this.ssn == null ? 0 : this.ssn.hashCode());return result;}
}

@Data

@Data Lombok 代碼:

@Data(staticConstructor="of")
public class Company {private final Person founder;private String name;private List<Person> employees;
}

等價于 Java 源碼:

public class Company {private final Person founder;private String name;private List<Person> employees;private Company(final Person founder) {this.founder = founder;}public static Company of(final Person founder) {return new Company(founder);}public Person getFounder() {return founder;}public String getName() {return name;}public void setName(final String name) {this.name = name;}public List<Person> getEmployees() {return employees;}public void setEmployees(final List<Person> employees) {this.employees = employees;}@java.lang.Overridepublic boolean equals(final java.lang.Object o) {if (o == this) return true;if (o == null) return false;if (o.getClass() != this.getClass()) return false;final Company other = (Company)o;if (this.founder == null ? other.founder != null : !this.founder.equals(other.founder)) return false;if (this.name == null ? other.name != null : !this.name.equals(other.name)) return false;if (this.employees == null ? other.employees != null : !this.employees.equals(other.employees)) return false;return true;}@java.lang.Overridepublic int hashCode() {final int PRIME = 31;int result = 1;result = result * PRIME + (this.founder == null ? 0 : this.founder.hashCode());result = result * PRIME + (this.name == null ? 0 : this.name.hashCode());result = result * PRIME + (this.employees == null ? 0 : this.employees.hashCode());return result;}@java.lang.Overridepublic java.lang.String toString() {return "Company(founder=" + founder + ", name=" + name + ", employees=" + employees + ")";}
}

@Cleanup

@Cleanup Lombok 代碼:

public void testCleanUp() {try {@Cleanup ByteArrayOutputStream baos = new ByteArrayOutputStream();baos.write(new byte[] {'Y','e','s'});System.out.println(baos.toString());} catch (IOException e) {e.printStackTrace();}
}

等價于 Java 源碼:

public void testCleanUp() {try {ByteArrayOutputStream baos = new ByteArrayOutputStream();try {baos.write(new byte[]{'Y', 'e', 's'});System.out.println(baos.toString());} finally {baos.close();}} catch (IOException e) {e.printStackTrace();}
}

@Synchronized

@Synchronized Lombok 代碼:

private DateFormat format = new SimpleDateFormat("MM-dd-YYYY");@Synchronized
public String synchronizedFormat(Date date) {return format.format(date);
}

等價于 Java 源碼:

private final java.lang.Object $lock = new java.lang.Object[0];
private DateFormat format = new SimpleDateFormat("MM-dd-YYYY");public String synchronizedFormat(Date date) {synchronized ($lock) {return format.format(date);}
}

@SneakyThrows

@SneakyThrows Lombok 代碼:

@SneakyThrows
public void testSneakyThrows() {throw new IllegalAccessException();
}

等價于 Java 源碼:

public void testSneakyThrows() {try {throw new IllegalAccessException();} catch (java.lang.Throwable $ex) {throw lombok.Lombok.sneakyThrow($ex);}
}

示例

使用 Lombok 定義一個 Java Bean

import lombok.Data;
import lombok.ToString;@Data
@ToString(exclude = "age")
public class Person {private String name;private Integer age;private String sex;
}

測試

Person person = new Person();
person.setName("張三");
person.setAge(20);
person.setSex("男");
System.out.println(person.toString());
// output: Person(name=張三, sex=男)

示例源碼

完整示例:源碼

引用和引申

引申

  • JavaStack

參考

  • Lombok 官網
  • Lombok Github
  • IntelliJ IDEA - Lombok Plugin

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/454471.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454471.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454471.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

html表單input file,input標簽type=file的文件上傳

一&#xff0c;通過表單提交的方式該提交方式只是提交普通表單&#xff1b;對于file組所選中的文件內容是不上傳的&#xff0c;因此需要設置&#xff1a;enctype屬性enctype"multipart/form-data"如果想上傳多文件&#xff0c;可添加multiple二&#xff0c;通過Ajax異…

AVS游程解碼、反掃描、反量化和反變換優化設計

中圖分類號:TN919.81   文獻標識碼:A   文章編號:1009-2552 (2007) 02-0054-04AVS游程解碼、反掃描、反量化和反變換優化設計趙 策, 劉佩林(上海交通大學電子工程系, 上海200240)摘 要: 提出了一種適用于AVS的游程解碼、反掃描、反量化和反變換硬件結構優化設計方案。根據…

Django REST framework介紹

現在前后端分離的架構設計越來越流行&#xff0c;業界甚至出現了API優先的趨勢。 顯然API開發已經成為后端程序員的必備技能了&#xff0c;那作為Python程序員特別是把Django作為自己主要的開發框架的程序員&#xff0c;Django REST framework&#xff08;DRF&#xff09;這個…

zabbix 安裝_安裝zabbix

準備一個純凈環境10.0.0.99首先修改yum源&#xff0c;修改為zabbix清華源&#xff0c;清華源玉zabbix官方源都是同步的&#xff0c;下載速度更快&#xff01;zabbix官方Download Zabbix?www.zabbix.com點擊下載&#xff0c;下面有zabbix的歷史版本以及官方安裝文檔可以查看到不…

拓展歐幾里得 [Noi2002]Savage

對于一個野人&#xff0c;他&#xff08;她&#xff1f;&#xff09;所在的位置&#xff0c;&#xff08;C[i]x*p[i]&#xff09;%ans,是的&#xff0c;暴力枚舉每一個ans&#xff0c;用拓展歐幾里得求出每兩個wildpeople(wildrage?)相遇的年份&#xff0c;如果小于最小的壽限…

CCNP-19 IS-IS試驗2(BSCI)

CCNP-19 IS-IS試驗2 實驗拓撲&#xff1a;試驗要求&#xff1a;R1 R2 R3全部采用集成的ISIS路由協議&#xff0c;R1 R2在區域49.0001內&#xff0c;R3在區域49.0002內&#xff0c;R1與R2之間的鏈路類型為L1&#xff0c;R2與R3之間的鏈路類型為L2。 試驗目的&#xff1a;掌握基…

正道的光用計算機,正道的光作文500字

當那熟悉的轟天巨雷般的呼嚕聲響起&#xff0c;我就知道&#xff0c;這又是睡不著的一天。同樣在宿舍&#xff1b;同樣是小翟&#xff1b;同樣的時間&#xff1b;同樣在我昏昏欲睡的時候&#xff0c;那個熟悉的呼嚕聲&#xff0c;它又來了。它將我從即將到來的美夢中驚醒了&…

AVS高清立體視頻編碼器

一、成果項目背景 電視技術在經歷了從黑白到彩色、從模擬到數字的技術變革之后正在醞釀另一場技術革命&#xff0c;從單純觀看二維場景的平面電視跨越到展現三維場景的立體電視。立體電視&#xff0c;又稱三維電視(3DTV)&#xff0c;提供了更為豐富的視覺信息和更具臨場感的觀…

RESTful介紹

RESTful介紹 REST與技術無關&#xff0c;代表的是一種軟件架構風格&#xff0c;REST是Representational State Transfer的簡稱&#xff0c;中文翻譯為“表征狀態轉移”或“表現層狀態轉化”。阮一峰 理解RESTful架構 RESTful API設計指南 阮一峰 RESTful設計指南 API與用戶…

dijkstra算法代碼_數據科學家需要知道的5種圖算法(附代碼)

在本文中&#xff0c;我將討論一些你應該知道的最重要的圖算法&#xff0c;以及如何使用Python實現它們。作者&#xff1a;AI公園導讀因為圖分析是數據科學家的未來。作為數據科學家&#xff0c;我們對pandas、SQL或任何其他關系數據庫非常熟悉。我們習慣于將用戶的屬性以列的形…

大暴搜 chess

仔細讀題&#xff0c;會發現吃掉敵人點對方案數的貢獻很神奇。如果走的空格相同&#xff0c;而走的敵人點不同&#xff0c;對答案無貢獻&#xff0c;而對于走的空格相同&#xff0c;但一種走了敵人點&#xff0c;另一種沒走&#xff0c;算兩個方案。。。。sb出題人語文簡直是和…

網站的SEO以及它和站長工具的之間秘密

博客遷移沒有注意 URL 地址的變化&#xff0c;導致百度和 google 這兩只爬蟲引擎短時間內找不到路。近段時間研究了下國內最大搜索引擎百度和國際最大搜索引擎google的站長工具&#xff0c;說下感受。 百度的站長工具地址&#xff1a;http://zhanzhang.baidu.com/dashboard/ind…

html 縮略圖點擊預覽,[每天進步一點點~] uni-app 點擊圖片實現預覽圖片列表

點擊圖片&#xff0c;實現預覽圖片功能&#xff0c;并且可循環預覽圖片列表&#xff01;image.png一、多張圖片預覽html代碼js代碼data(){return {photos:[{ src: 圖片路徑1},{ src: 圖片路徑2},{ src: 圖片路徑3},……]}},methods: {// 預覽圖片previewImage(index) {let phot…

git ssh拉取代碼_阿里云搭建git服務器

一.搭建步驟&#xff0c;分為兩步搭建中心倉庫自動同步代碼到站點目錄二.詳細步驟如下1.先檢查一下服務器上有沒有安裝gitgit --version如果出現版本號&#xff0c;說明服務器已經安裝git&#xff0c;如圖所示&#xff1a;2.如果沒有版本信息&#xff0c;則先安裝git&#xff1…

Django REST framework 序列化

創建一個序列化類 使用序列化有四種方式 使用json模塊&#xff0c;完全手寫使用django自帶的序列化模塊 1&#xff0c;# from django.core import serializers 2&#xff0c;# dataserializers.serialize(“json”,book_list)使用REST framework 帶的序列化方法&#xff0c…

基于SIMD的AVS整數反變換算法設計與優化

基于SIMD 的AVS 整數反變換算法設計與優化王玲娟&#xff0c;張剛**作者簡介&#xff1a;王玲娟&#xff0c;&#xff08;1987-&#xff09;&#xff0c;女&#xff0c;在讀碩士&#xff0c;主要研究方向&#xff1a;視頻解碼算法通信聯系人&#xff1a;張剛&#xff0c;&#…

Word -- 列表重新編號

Word -- 列表重新編號office一言&#xff1a;我小心翼翼地灌溉&#xff0c;一日復一日地期待&#xff0c;那么費力&#xff0c;植成參天的喬木&#xff0c;豈愿見你終有一日從容赴死&#xff1f;問題 word 文檔早就想解決的一個問題&#xff0c;這次遇到了就上網找解決掉了&…

非持久連接和持久連接

非持久連接和持久連接 HTTP既可以使用非持久連接(nonpersistent connection)&#xff0c;也可以使用持久連接(persistent connection)。HTTP/1.0使用非持久連接&#xff0c;HTTP/1.1默認使用持久連接。 非持久連接 讓我們查看一下非持久連接情況下從服務器到客戶傳送一個Web頁面…

計算機開機鍵鼠無法識別,我得電腦一開機就檢測不到鍵盤和鼠標

2005-10-18 16:06:131、開機后當出現dos界面時&#xff0c;按一下pause鍵(這個鍵在四個方向鍵的上邊&#xff0c;仔細找就能找到)&#xff0c;如果計算機啟動停止&#xff0c;說明你的鍵盤起作用&#xff0c;主板在開機時就已經檢測到了鼠標鍵盤。啟動后不能使用鼠標鍵盤&#…

vs2003 局部友元訪問私有不可訪問_C++ 類:重載運算符與友元

18.類中重載運算符與友元上次節中學習了如何在類中重新定義賦值()運算符&#xff0c;實際上在一個自定義類中除了賦值()運算符外&#xff0c;類的對象是不可以直接使用運算符的&#xff0c;比如你在main函數中寫這樣的代碼會報錯&#xff1a;如果想解決這些報錯問題&#xff0c…