99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

程序員如何自己new一個(gè)對(duì)象

Android編程精選 ? 來(lái)源:博客 ? 作者:Cipher ? 2021-09-22 09:37 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

https://www.ciphermagic.cn/java8-builder.html

程序員經(jīng)常會(huì)遇到靈魂拷問(wèn):你有對(duì)象嗎?

沒(méi)有,但我可以 new 一個(gè)!

public class GirlFriend {

private String name;

private int age;

// 省略 getter & setter 。..

public static void main(String[] args) {

GirlFriend myGirlFriend = new GirlFriend();

myGirlFriend.setName(“小美”);

myGirlFriend.setAge(18);

}

}

沒(méi)問(wèn)題,老鐵!但如果對(duì)象的屬性太多,咋辦?

public class GirlFriend {

private String name;

private int age;

private int bust;

private int waist;

private int hips;

private List《String》 hobby;

private String birthday;

private String address;

private String mobile;

private String email;

private String hairColor;

private Map《String, String》 gift;

// 等等等等 。..

// 省略 getter & setter 。..

public static void main(String[] args) {

GirlFriend myGirlFriend = new GirlFriend();

myGirlFriend.setName(“小美”);

myGirlFriend.setAge(18);

myGirlFriend.setBust(33);

myGirlFriend.setWaist(23);

myGirlFriend.setHips(33);

myGirlFriend.setBirthday(“2001-10-26”);

myGirlFriend.setAddress(“上海浦東”);

myGirlFriend.setMobile(“18688888888”);

myGirlFriend.setEmail(“pretty-xiaomei@qq.com”);

myGirlFriend.setHairColor(“淺棕色帶點(diǎn)微卷”);

List《String》 hobby = new ArrayList《》();

hobby.add(“逛街”);

hobby.add(“購(gòu)物”);

hobby.add(“買東西”);

myGirlFriend.setHobby(hobby);

Map《String, String》 gift = new HashMap《》();

gift.put(“情人節(jié)禮物”, “LBR 1912女王時(shí)代”);

gift.put(“生日禮物”, “迪奧烈焰藍(lán)金”);

gift.put(“紀(jì)念日禮物”, “阿瑪尼紅管唇釉”);

myGirlFriend.setGift(gift);

// 等等等等 。..

}

}

GirlFriend{name=‘小美’

, age=18

, bust=33

, waist=23

, hips=33

, hobby=[逛街, 購(gòu)物, 買東西]

, birthday=‘2001-10-26’

, address=‘上海浦東’

, mobile=‘18688888888’

, email=‘pretty-xiaomei@qq.com’

, hairColor=‘淺棕色帶點(diǎn)微卷’

, gift={情人節(jié)禮物=LBR 1912女王時(shí)代, 生日禮物=迪奧烈焰藍(lán)金, 紀(jì)念日禮物=阿瑪尼紅管唇釉}

}

GirlFriend 是很美,但寫(xiě)起來(lái)也太麻煩了吧。

說(shuō)說(shuō)缺點(diǎn):實(shí)例化和設(shè)置屬性分開(kāi),不好維護(hù);變量名重復(fù)寫(xiě)。

莫慌,看法寶~

這里不再介紹其他 Builder 實(shí)現(xiàn)方式,直接祭出最實(shí)用的通用Builder:

適用于所有類,不需要改造原來(lái)類,不需要 lombok 插件支持。

先看看使用姿勢(shì):

public class GirlFriend {

// 省略屬性 。..

// 省略 getter & setter 。..

// 為了演示方便,加幾個(gè)聚合方法

public void addHobby(String hobby) {

this.hobby = Optional.ofNullable(this.hobby).orElse(new ArrayList《》());

this.hobby.add(hobby);

}

public void addGift(String day, String gift) {

this.gift = Optional.ofNullable(this.gift).orElse(new HashMap《》());

this.gift.put(day, gift);

}

public void setVitalStatistics(int bust, int waist, int hips) {

this.bust = bust;

this.waist = waist;

this.hips = hips;

}

public static void main(String[] args) {

GirlFriend myGirlFriend = Builder.of(GirlFriend::new)

.with(GirlFriend::setName, “小美”)

.with(GirlFriend::setAge, 18)

.with(GirlFriend::setVitalStatistics, 33, 23, 33)

.with(GirlFriend::setBirthday, “2001-10-26”)

.with(GirlFriend::setAddress, “上海浦東”)

.with(GirlFriend::setMobile, “18688888888”)

.with(GirlFriend::setEmail, “pretty-xiaomei@qq.com”)

.with(GirlFriend::setHairColor, “淺棕色帶點(diǎn)微卷”)

.with(GirlFriend::addHobby, “逛街”)

.with(GirlFriend::addHobby, “購(gòu)物”)

.with(GirlFriend::addHobby, “買東西”)

.with(GirlFriend::addGift, “情人節(jié)禮物”, “LBR 1912女王時(shí)代”)

.with(GirlFriend::addGift, “生日禮物”, “迪奧烈焰藍(lán)金”)

.with(GirlFriend::addGift, “紀(jì)念日禮物”, “阿瑪尼紅管唇釉”)

// 等等等等 。..

.build();

}

}

看到了嗎!實(shí)例化和屬性設(shè)置在同一條語(yǔ)句執(zhí)行,鏈?zhǔn)讲僮?,一路點(diǎn)點(diǎn)點(diǎn),清爽!

Talk is cheap, show me the code:

/**

* 通用的 Builder 模式構(gòu)建器

*

* @author: CipherCui

* @since 2019/8/29

*/public class Builder《T》 {

private final Supplier《T》 instantiator;

private List《Consumer《T》》 modifiers = new ArrayList《》();

public Builder(Supplier《T》 instantiator) {

this.instantiator = instantiator;

}

public static 《T》 Builder《T》 of(Supplier《T》 instantiator) {

return new Builder《》(instantiator);

}

public 《P1》 Builder《T》 with(Consumer1《T, P1》 consumer, P1 p1) {

Consumer《T》 c = instance -》 consumer.accept(instance, p1);

modifiers.add(c);

return this;

}

public 《P1, P2》 Builder《T》 with(Consumer2《T, P1, P2》 consumer, P1 p1, P2 p2) {

Consumer《T》 c = instance -》 consumer.accept(instance, p1, p2);

modifiers.add(c);

return this;

}

public 《P1, P2, P3》 Builder《T》 with(Consumer3《T, P1, P2, P3》 consumer, P1 p1, P2 p2, P3 p3) {

Consumer《T》 c = instance -》 consumer.accept(instance, p1, p2, p3);

modifiers.add(c);

return this;

}

public T build() {

T value = instantiator.get();

modifiers.forEach(modifier -》 modifier.accept(value));

modifiers.clear();

return value;

}

/**

* 1 參數(shù) Consumer

*/

@FunctionalInterface

public interface Consumer1《T, P1》 {

void accept(T t, P1 p1);

}

/**

* 2 參數(shù) Consumer

*/

@FunctionalInterface

public interface Consumer2《T, P1, P2》 {

void accept(T t, P1 p1, P2 p2);

}

/**

* 3 參數(shù) Consumer

*/

@FunctionalInterface

public interface Consumer3《T, P1, P2, P3》 {

void accept(T t, P1 p1, P2 p2, P3 p3);

}

}

這個(gè)示例最多支持三個(gè)參數(shù)的設(shè)置屬性方法,也完全夠用了。如果要擴(kuò)展也很容易,依葫蘆畫(huà)瓢,添加多個(gè)參數(shù)的Consumer。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2989

    瀏覽量

    109576
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4900

    瀏覽量

    70697

原文標(biāo)題:你還在 new 對(duì)象嗎?Java8 通用 Builder 了解一下?

文章出處:【微信號(hào):AndroidPush,微信公眾號(hào):Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    程序設(shè)計(jì)與數(shù)據(jù)結(jié)構(gòu)

    的地址)出發(fā),采用推導(dǎo)的方式,深入淺出的分析了廣大C程序員學(xué)習(xí)和開(kāi)發(fā)中遇到的難點(diǎn)。 2. 從方法論的高度對(duì)C語(yǔ)言在數(shù)據(jù)結(jié)構(gòu)和算法方面的應(yīng)用進(jìn)行了深入講解和闡述。 3. 講解了絕大多數(shù)C程序員開(kāi)發(fā)
    發(fā)表于 05-13 16:45

    計(jì)算機(jī)網(wǎng)絡(luò)排錯(cuò)思路總結(jié)

    明人不說(shuō)暗話,這篇文章我們來(lái)聊個(gè)非常有用,同時(shí)也是程序員必備的技能,那就是網(wǎng)絡(luò)排錯(cuò)思路大總結(jié)。
    的頭像 發(fā)表于 04-01 17:32 ?369次閱讀
    計(jì)算機(jī)網(wǎng)絡(luò)排錯(cuò)思路總結(jié)

    零基礎(chǔ)入門(mén):如何在樹(shù)莓派上編寫(xiě)和運(yùn)行Python程序?

    種非常有用的編程語(yǔ)言,其語(yǔ)法易于閱讀,允許程序員使用比匯編、C或Java等語(yǔ)言更少的代碼行。Python編程語(yǔ)言最初實(shí)際上是作為L(zhǎng)inux的腳本語(yǔ)言而開(kāi)發(fā)的。Py
    的頭像 發(fā)表于 03-25 09:27 ?724次閱讀
    零基礎(chǔ)入門(mén):如何在樹(shù)莓派上編寫(xiě)和運(yùn)行Python<b class='flag-5'>程序</b>?

    阿里云升級(jí)通義靈碼AI程序員,全面上線

    和JetBrains IDEs兩大主流開(kāi)發(fā)環(huán)境,這意味著開(kāi)發(fā)者可以在自己熟悉的開(kāi)發(fā)平臺(tái)上,無(wú)縫接入并使用這款A(yù)I工具。 除了支持主流開(kāi)發(fā)環(huán)境外,通義靈碼AI程序員還引入了多項(xiàng)新特性,如多文件代碼修改和上下文感知等。這些特性使得AI能夠更好地理解開(kāi)發(fā)者的意圖和需
    的頭像 發(fā)表于 01-09 11:16 ?710次閱讀

    TMS320C6000程序員指南

    電子發(fā)燒友網(wǎng)站提供《TMS320C6000程序員指南.pdf》資料免費(fèi)下載
    發(fā)表于 12-24 17:19 ?0次下載
    TMS320C6000<b class='flag-5'>程序員</b>指南

    TMS320C55x DSP CPU程序員參考補(bǔ)充

    電子發(fā)燒友網(wǎng)站提供《TMS320C55x DSP CPU程序員參考補(bǔ)充.pdf》資料免費(fèi)下載
    發(fā)表于 12-21 11:36 ?3次下載
    TMS320C55x DSP CPU<b class='flag-5'>程序員</b>參考補(bǔ)充

    UCD3138A64/UCD3138128程序員手冊(cè)

    電子發(fā)燒友網(wǎng)站提供《UCD3138A64/UCD3138128程序員手冊(cè).pdf》資料免費(fèi)下載
    發(fā)表于 12-09 14:42 ?0次下載
    UCD3138A64/UCD3138128<b class='flag-5'>程序員</b>手冊(cè)

    機(jī)械革命發(fā)布CODE AI程序員

    近日,英特爾新質(zhì)生產(chǎn)力技術(shù)生態(tài)大會(huì)在成都舉行,機(jī)械革命作為重要參展商帶來(lái)了多款明星產(chǎn)品引爆全場(chǎng)!其中更是在AI PC軟件生態(tài)產(chǎn)品發(fā)布分論壇上,Intel、智譜、機(jī)械革命三方聯(lián)合發(fā)布了專為程序員設(shè)計(jì)的CODE AI程序員本,成為本次大會(huì)的
    的頭像 發(fā)表于 11-30 10:34 ?1102次閱讀

    Linux驅(qū)動(dòng)程序程序員指南

    電子發(fā)燒友網(wǎng)站提供《Linux驅(qū)動(dòng)程序程序員指南.pdf》資料免費(fèi)下載
    發(fā)表于 11-22 15:53 ?0次下載
    Linux驅(qū)動(dòng)<b class='flag-5'>程序</b><b class='flag-5'>程序員</b>指南

    AI編程工具會(huì)不會(huì)搶程序員飯碗

    AI編程工具可輔助編程,減少手動(dòng)編碼,提升效率,對(duì)程序員有積極影響也有挑戰(zhàn)。程序員需深化技能、拓寬知識(shí)應(yīng)對(duì)。長(zhǎng)遠(yuǎn)看,AI與人類程序員將共生共榮。
    的頭像 發(fā)表于 11-08 10:17 ?527次閱讀

    程序員去面試只需個(gè)技能征服所有面試官!

    個(gè)車輛工程專業(yè)的研究生去面試,面試官最后問(wèn)他會(huì)不會(huì)嵌入式。雖然應(yīng)聘的崗位不是嵌入式工程師,但看來(lái)老板還是希望他能懂點(diǎn)這方面的知識(shí)。這個(gè)小插曲就說(shuō)明了個(gè)重要的就業(yè)
    的頭像 發(fā)表于 11-05 19:35 ?548次閱讀
    <b class='flag-5'>程序員</b>去面試只需<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b>技能征服所有面試官!

    軟通動(dòng)力子公司鴻湖萬(wàn)聯(lián)助陣?guó)櫭?024程序員節(jié)成功舉辦

    10月24日,在武漢、成都、深圳等地政府指導(dǎo)下,鴻蒙生態(tài)服務(wù)公司舉辦了場(chǎng)面向廣大開(kāi)發(fā)者的盛會(huì)——鴻蒙1024程序員節(jié)暨鴻蒙原生應(yīng)用交流會(huì)。軟通動(dòng)力子公司鴻湖萬(wàn)聯(lián)作為開(kāi)源鴻蒙生態(tài)的重要參與者和貢獻(xiàn)者
    的頭像 發(fā)表于 10-29 15:49 ?749次閱讀
    軟通動(dòng)力子公司鴻湖萬(wàn)聯(lián)助陣?guó)櫭?024<b class='flag-5'>程序員</b>節(jié)成功舉辦

    第五屆長(zhǎng)沙·中國(guó)1024程序員節(jié)開(kāi)幕

    據(jù)官方媒體報(bào)道,10月24日;? 第五屆長(zhǎng)沙·中國(guó)1024程序員節(jié)在湖南湘江新區(qū)開(kāi)幕;本次中國(guó)1024程序員節(jié)以“智能應(yīng)用新生態(tài)”為主題。設(shè)置有岳麓對(duì)話、技術(shù)英雄會(huì)、主題峰會(huì)及賽事、展覽等活動(dòng),
    的頭像 發(fā)表于 10-25 15:42 ?494次閱讀

    個(gè)socket對(duì)應(yīng)個(gè)連接嗎

    的接口,允許在不同計(jì)算機(jī)之間建立連接,進(jìn)行數(shù)據(jù)交換。個(gè)socket可以看作是兩個(gè)程序之間的通信端點(diǎn),由IP地址和端口號(hào)唯標(biāo)識(shí)。
    的頭像 發(fā)表于 08-16 10:55 ?920次閱讀

    京東上萬(wàn)程序員都AI用它!

    對(duì)大模型生成代碼進(jìn)行智能修復(fù),為程序員開(kāi)啟代碼漏洞修復(fù)的“自動(dòng)駕駛”模式,不但減少人工接入、提高工作效率,更為企業(yè)抵御內(nèi)外部各種攻擊構(gòu)建起道堅(jiān)固的安全屏障,確保業(yè)務(wù)的連續(xù)性和穩(wěn)定性。 JoyCoder是京東云自主研發(fā)的款輔助
    的頭像 發(fā)表于 07-17 16:29 ?490次閱讀
    京東上萬(wàn)<b class='flag-5'>程序員</b>都AI用它!