<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Lombok的安裝分兩部分:Idea外掛的安裝和maven中pom檔案的匯入。
點選設定,選擇外掛,在Idea的外掛設定中搜尋Lombok(需要聯網)或官網下載本地安裝,點選初始化安裝
在外掛的描述中也能夠看到它支援的註解。
第二步,引入pom中依賴,當前最細版本1.18.10。
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.10</version> </dependency>
如果是通過Idea建立Spring Boot專案,可在建立專案時直接在“Developer Tool”中選擇Lombok。
完成了以上兩步,就可以在程式碼中使用該款神器了。
這是官網給出的所支援的註解,在這我們也能檢視:https://projectlombok.org/features/all
在這裡給出常用的註解及其介紹:
使用val作為區域性變數宣告的型別,而不是實際寫入型別。 執行此操作時,將從初始化表示式推斷出型別。
public Map<String, String> getMap() { val map = new HashMap<String, String>(); map.put("1", "a"); return map; }
效果如下:
public Map<String, String> getMap() { HashMap<String, String> map = new HashMap(); map.put("1", "a"); return map; }
也就是說在區域性變數中,Lombok幫你推斷出具體的型別,但只能用於區域性變數中。
@Data最常用的註解之一。註解在類上,提供該類所有屬性的getter/setter方法,還提供了equals、canEqual、hashCode、toString方法。
就是開發人員不用手寫相應的方法,而Lombok會幫你生成上述所有方法。
使用@Data範例如下,最直觀的就是不用寫getter/setter方法。
@Data public class Demo { private int id; private String remark; }
我們看該類編譯之後是什麼樣子。
public class Demo { private int id; private String remark; public Demo() { } public int getId() { return this.id; public String getRemark() { return this.remark; public void setId(final int id) { this.id = id; public void setRemark(final String remark) { this.remark = remark; public boolean equals(final Object o) { if (o == this) { return true; } else if (!(o instanceof Demo)) { return false; } else { Demo other = (Demo)o; if (!other.canEqual(this)) { return false; } else if (this.getId() != other.getId()) { } else { Object this$remark = this.getRemark(); Object other$remark = other.getRemark(); if (this$remark == null) { if (other$remark != null) { return false; } } else if (!this$remark.equals(other$remark)) { return false; } return true; } } protected boolean canEqual(final Object other) { return other instanceof Demo; public int hashCode() { int PRIME = true; int result = 1; int result = result * 59 this.getId(); Object $remark = this.getRemark(); result = result * 59 ($remark == null ? 43 : $remark.hashCode()); return result; public String toString() { return "Demo(id=" this.getId() ", remark=" this.getRemark() ")"; }
官網給的更加詳細,這裡只展現一部分,例如下圖是官網給的例子:
連結:https://projectlombok.org/features/Data
作用於屬性上,為該屬性提供getter/setter方法;
作用與類上,為該類所有的屬性提供getter/setter方法, 都提供預設構造方法。
使用@Getter/@Setter範例如下:
public class GetterSetterExample { @Getter @Setter private int age = 10; @Setter(AccessLevel.PROTECTED) private String name; @Override public String toString() { return String.format("%s (age: %d)", name, age); } }
編譯後就是這個樣子:
public class GetterSetterExample { private int age = 10; private String name; @Override public String toString() { return String.format("%s (age: %d)", name, age); } public int getAge() { return age; public void setAge(int age) { this.age = age; protected void setName(String name) { this.name = name; }
其餘例子就不展示了,大家可以去官網檢視詳細的,這裡只給出作用。
作用於類上,為該類提供一個屬性名為log的log4j紀錄檔物件。
@Log4j public class Demo { }
該屬性一般使用於Controller、Service等業務處理類上。與此註解相同的還有@Log4j2,顧名思義,針對Log4j2。
作用於類上,為該類提供一個包含全部參的構造方法,注意此時預設構造方法不會提供。
@AllArgsConstructor public class Demo { private int id; private String remark; }
效果如下:
public class Demo { private int id; private String remark; public Demo(final int id, final String remark) { this.id = id; this.remark = remark; } }
作用於類上,提供一個無參的構造方法。
可以和@AllArgsConstructor同時使用,此時會生成兩個構造方法:無參構造方法和全參構造方法。
作用於類上,生成equals、canEqual、hashCode方法。
具體效果參看最開始的@Data效果,也可以參考官網。
作用於屬性上,提供關於此引數的非空檢查,如果引數為空,則丟擲空指標異常。
使用方法:
public class Demo { @NonNull private int id; private String remark; }
作用於類上,由類中所有帶有@NonNull註解或者帶有final修飾的成員變數作為引數生成構造方法。
作用於變數,保證該變數代表的資源會被自動關閉,預設呼叫資源的close()方法,如果該資源有其它關閉方法,可使用@Cleanup(“methodName”)
來指定。
public void jedisExample(String[] args) { try { @Cleanup Jedis jedis = redisService.getJedis(); } catch (Exception ex) { logger.error(「Jedis異常:」,ex) } }
效果相當於:
public void jedisExample(String[] args) { Jedis jedis= null; try { jedis = redisService.getJedis(); } catch (Exception e) { logger.error(「Jedis異常:」,ex) } finally { if (jedis != null) { try { jedis.close(); } catch (Exception e) { e.printStackTrace(); } } } }
作用於類上,生成包含所有引數的toString方法。見@Data中toString方法。
作用於類上,會生成全引數的構造方法、getter方法、equals、hashCode、toString方法。
與@Data相比多了全參構造方法,少了預設構造方法、setter方法和canEqual方法。
該註解需要注意的是:會將欄位新增上final修飾,個人感覺此處有些失控,不太建議使用。
作用於方法上,相當於把方法內的程式碼新增了一個try-catch處理,捕獲異常catch中用Lombok.sneakyThrow(e)
丟擲異常。使用@SneakyThrows(BizException.class)
指定丟擲具體異常。
@SneakyThrows public int getValue(){ int a = 1; int b = 0; return a/b; }
效果如下:
public int getValue() { try { int a = 1; int b = 0; return a / b; } catch (Throwable var3) { throw var3; } }
作用於類方法或實體方法上,效果與synchronized相同。
區別在於鎖物件不同,對於類方法和實體方法,synchronized關鍵字的鎖物件分別是類的class物件和this物件,而@Synchronized的鎖物件分別是私有靜態final物件lock和私有final物件lock。也可以指定鎖物件。
public class FooExample { private final Object readLock = new Object(); @Synchronized public static void hello() { System.out.println("world"); } @Synchronized("readLock") public void foo() { System.out.println("bar"); } }
效果相當於如下:
public class FooExample { private static final Object $LOCK = new Object[0]; private final Object readLock = new Object(); public static void hello() { synchronized($LOCK) { System.out.println("world"); } } public void foo() { synchronized(readLock) { System.out.println("bar"); } }
作用於類上,如果你喜歡使用Builder的流式操作,那麼@Builder可能是你喜歡的註解了。
使用方法:
@Builder public class Demo { private int id; private String remark; }
效果如下:
public class Demo { private int id; private String remark; Demo(final int id, final String remark) { this.id = id; this.remark = remark; } public static Demo.DemoBuilder builder() { return new Demo.DemoBuilder(); public static class DemoBuilder { private int id; private String remark; DemoBuilder() { } public Demo.DemoBuilder id(final int id) { this.id = id; return this; public Demo.DemoBuilder remark(final String remark) { this.remark = remark; public Demo build() { return new Demo(this.id, this.remark); public String toString() { return "Demo.DemoBuilder(id=" this.id ", remark=" this.remark ")"; }
我們可以看到,在該類內部提供了DemoBuilder類用來處理具體的流式操作。同時提供了全參的構造方法。
到此這篇關於Java開發神器Lombok安裝與使用的文章就介紹到這了,更多相關Java Lombok安裝與使用內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45