免费在线a视频-免费在线观看a视频-免费在线观看大片影视大全-免费在线观看的视频-色播丁香-色播基地

答應(yīng)我,試試IDEA的這款插件,不要在代碼中出現(xiàn)大量的set/get方法了...

:2020年03月26日 Java面試那些事兒
分享到:

# 前言what?你的 Java 代碼中還充斥著大量的 set/get 方法?我們?cè)趧傞_(kāi)始學(xué)習(xí) Java 語(yǔ)言的時(shí)候講過(guò),面向?qū)ο蟮娜筇卣骶褪欠庋b,繼承,和多態(tài)。在 Java 中,要保證封裝性,需要將成員變量私有化,對(duì)外...

# 前言

what?你的 Java 代碼中還充斥著大量的 set/get 方法?

我們?cè)趧傞_(kāi)始學(xué)習(xí) Java 語(yǔ)言的時(shí)候講過(guò),面向?qū)ο蟮娜筇卣骶褪欠庋b,繼承,和多態(tài)。在 Java 中,要保證封裝性,需要將成員變量私有化,對(duì)外提供 set/get 方法來(lái)訪問(wèn),雖然現(xiàn)在的 IDE,像 eclipse,IDEA都提供了快捷鍵,來(lái)生成 set/get 方法,但是在做項(xiàng)目的時(shí)候,一個(gè) JavaBean 往往會(huì)有很多的成員變量,一個(gè)變量對(duì)應(yīng)兩個(gè)方法,如果有10幾個(gè)成員變量,那么會(huì)對(duì)應(yīng)20多個(gè)方法,也許還要去寫(xiě)構(gòu)造器、equals 等方法,而且需要維護(hù)。這樣一來(lái),會(huì)使代碼變得非常冗余,這些顯得很冗長(zhǎng)也沒(méi)有太多技術(shù)含量,一旦修改屬性,就容易出現(xiàn)忘記修改對(duì)應(yīng)方法的失誤。

我在看大佬的項(xiàng)目的源碼的時(shí)候,看到他們的代碼中都沒(méi)有 set/get 方法,取而代之的是在 JavaBean 上標(biāo)注的注解,我感到非常的好奇,原來(lái)他們是用了一種叫做 Lombok 的插件,便去詳細(xì)了解了這個(gè)插件。

# Lombok背景介紹

官方介紹如下:

Project Lombok makes java a spicier language by adding 'handlers' that know how to build and compile simple, boilerplate-free, not-quite-java code.

大致意思是 Lombok 通過(guò)增加一些“處理程序”,可以讓 Java 變得簡(jiǎn)潔、快速。

# Lombok使用方法

Lombok 能通過(guò)注解的方式,在編譯時(shí)自動(dòng)為屬性生成構(gòu)造器、getter/setter、equals、hashcode、toString 方法。出現(xiàn)的神奇就是在源碼中沒(méi)有 getter 和 setter 方法,但是在編譯生成的字節(jié)碼文件中有 getter 和 setter 方法。這樣就省去了手動(dòng)重建這些代碼的麻煩,使代碼看起來(lái)更簡(jiǎn)潔些。

Lombok 的使用跟引用 jar 包一樣,可以在官網(wǎng)(https://projectlombok.org/download)下載 jar 包,也可以使用 maven 添加依賴:

<dependency>

<groupId>org.projectlombok</groupId>

<artifactId>lombok</artifactId>

<version>1.18.10</version>

<scope>provided</scope>

</dependency>

注意:

第一次使用 Lombok 插件需要做如下幾步配置

將 Lombok 插件安裝到 IDEA

file -> setting

選中 Plugins,搜索 Lombok,點(diǎn)擊 Install

選擇默認(rèn)的編譯方式為 javac,因?yàn)?eclipse 是不支持 Lombok 的編譯方式的,javac 支持 Lombok 的編譯方式。

打開(kāi)注解生成器 Enable annotation processing

再次注意:

IntelliJ IDEA 2019.2(也就是我用的版本)默認(rèn)是不支持 Lombok 插件的,需要去

https://plugins.jetbrains.com/plugin/6317-lombok/versions

下載對(duì)應(yīng)版本的插件,然后手動(dòng)引入,在 IDEA 中選擇 File -> Setting -> plugins 找到 Install Plugin from Disk…(注意版本不同位置可能有所差異)

接下來(lái)我們來(lái)分析 Lombok 中注解的具體用法

@Data

@Data 注解在類上,會(huì)為類的所有屬性自動(dòng)生成 setter/getter、equals、canEqual、hashCode、toString 方法,如為 final 屬性,則不會(huì)為該屬性生成 setter 方法。

比如我們寫(xiě)一個(gè)學(xué)生類

@Data

public class Student {

private String name;

private Integer age;

private Integer id;

private String major;

}

這樣就可以調(diào)用 set/get 方法了。

@Getter/@Setter

如果覺(jué)得@Data 太過(guò)殘暴(因?yàn)锧Data 集合了@ToString、@EqualsAndHashCode、@Getter/@Setter、@RequiredArgsConstructor 的所有特性)不夠精細(xì),可以使用@Getter/@Setter 注解,此注解在屬性上,可以為相應(yīng)的屬性自動(dòng)生成 set/get 方法。

public class Student {

@Setter private String name;

private Integer age;

private Integer id;

private String major;

public static void main(String[] args) {

Student stu = new Student();

stu.setName("Mr.ml");

}

}

@NonNull

該注解用在屬性或構(gòu)造器上,Lombok 會(huì)生成一個(gè)非空的聲明,可用于校驗(yàn)參數(shù),能幫助避免空指針。

public class Student {

@Setter private String name;

private Integer age;

private Integer id;

private String major;

public Student(@NonNull String name) {

this.name = name;

}

}

@Cleanup

該注解能幫助我們自動(dòng)調(diào)用 close() 方法,很大的簡(jiǎn)化了代碼。

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);

}

}

}

@EqualsAndHashCode

默認(rèn)情況下,會(huì)使用所有非靜態(tài)(non-static)和非瞬態(tài)(non-transient)屬性來(lái)生成 equals 和 hashCode,也能通過(guò) exclude 注解來(lái)排除一些屬性。

@EqualsAndHashCode(exclude={"id", "shape"})

public class EqualsAndHashCodeExample {

private transient int transientVar = 10;

private String name;

private double score;

private Shape shape = new Square(5, 10);

private String[] tags;

private int id;

public String getName() {

return this.name;

}

@EqualsAndHashCode(callSuper=true)

public static class Square extends Shape {

private final int width, height;

public Square(int width, int height) {

this.width = width;

this.height = height;

}

}

}

@ToString

類使用@ToString 注解,Lombok 會(huì)生成一個(gè) toString() 方法,默認(rèn)情況下,會(huì)輸出類名、所有屬性(會(huì)按照屬性定義順序),用逗號(hào)來(lái)分割。

通過(guò)將 includeFieldNames 參數(shù)設(shè)為 true,就能明確的輸出 toString() 屬性。這一點(diǎn)是不是有點(diǎn)繞口,通過(guò)代碼來(lái)看會(huì)更清晰些。

@ToString(exclude="id")

public class ToStringExample {

private static final int STATIC_VAR = 10;

private String name;

private Shape shape = new Square(5, 10);

private String[] tags;

private int id;

public String getName() {

return this.getName();

}

@ToString(callSuper=true, includeFieldNames=true)

public static class Square extends Shape {

private final int width, height;

public Square(int width, int height) {

this.width = width;

this.height = height;

}

}

}

NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor

無(wú)參構(gòu)造器、部分參數(shù)構(gòu)造器、全參構(gòu)造器。Lombok沒(méi)法實(shí)現(xiàn)多種參數(shù)構(gòu)造器的重載。

@RequiredArgsConstructor(staticName = "of")

@AllArgsConstructor(access = AccessLevel.PROTECTED)

public class ConstructorExample<T> {

private int x, y;

@NonNull private T description;

@NoArgsConstructor

public static class NoArgsExample {

@NonNull private String field;

}

}

[我要糾錯(cuò)]
文:王振袢&發(fā)表于江蘇
關(guān)鍵詞: 前言 what 你的 Java 代碼

來(lái)源:本文內(nèi)容搜集或轉(zhuǎn)自各大網(wǎng)絡(luò)平臺(tái),并已注明來(lái)源、出處,如果轉(zhuǎn)載侵犯您的版權(quán)或非授權(quán)發(fā)布,請(qǐng)聯(lián)系小編,我們會(huì)及時(shí)審核處理。
聲明:江蘇教育黃頁(yè)對(duì)文中觀點(diǎn)保持中立,對(duì)所包含內(nèi)容的準(zhǔn)確性、可靠性或者完整性不提供任何明示或暗示的保證,不對(duì)文章觀點(diǎn)負(fù)責(zé),僅作分享之用,文章版權(quán)及插圖屬于原作者。

點(diǎn)個(gè)贊
0
踩一腳
0

您在閱讀:答應(yīng)我,試試IDEA的這款插件,不要在代碼中出現(xiàn)大量的set/get方法了...

Copyright?2013-2024 JSedu114 All Rights Reserved. 江蘇教育信息綜合發(fā)布查詢平臺(tái)保留所有權(quán)利

蘇公網(wǎng)安備32010402000125 蘇ICP備14051488號(hào)-3技術(shù)支持:南京博盛藍(lán)睿網(wǎng)絡(luò)科技有限公司

南京思必達(dá)教育科技有限公司版權(quán)所有   百度統(tǒng)計(jì)

主站蜘蛛池模板: 欧美一区二区三区免费播放 | 亚洲欧美影院 | 色老头成人免费视频天天综合 | 国产精品亚洲午夜不卡 | 国产h在线播放 | 欧美日韩一级大片 | 日韩精品一区二区三区不卡 | 亚洲欧洲尹人香蕉综合 | 男女一级毛片免费播放 | 中文字幕第二页在线 | 欧美三级成人理伦 | 国产免费丝袜调教视频 | 最近2019在线观看中文视频 | 国产亚洲3p无码一区二区 | 欧美不卡网 | 手机在线黄色 | 国产美女高清一级a毛片 | 清风阁视频我爱干 | 欧美xxxx做受欧美88bbw | 被窝国产理论一二三影院 | 狠狠婷婷 | 日本二级黄色片 | 高清一级做a爱过程免费视频 | 91社区在线观看精品 | 亚洲福利区 | 国产一级α片 | a色毛片免费视频 | 天天躁夜夜躁狠狠躁 | 最近免费中文字幕视频高清在线看 | 一级黄色片免费播放 | 一级黄色片网 | 欧美色视频网站 | 亚洲成人播放 | 青草91| 91av成年影院在线播放 | 免费看国产精品麻豆 | 日韩黄色大片免费看 | 成人国产精品免费视频 | 日本人免费xxx在线视频 | 日韩成人免费视频 | 久久精品午夜视频 |
最熱文章
最新文章
  • 阿里云上云鉅惠,云產(chǎn)品享最低成本,有需要聯(lián)系,
  • 卡爾蔡司鏡片優(yōu)惠店,鏡片價(jià)格低
  • 蘋(píng)果原裝手機(jī)殼