色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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)讲僮鳎宦伏c(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)注

    19

    文章

    2973

    瀏覽量

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

    關(guān)注

    30

    文章

    4803

    瀏覽量

    68762

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

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    阿里云升級(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 ?217次閱讀

    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 ?0次下載
    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 ?441次閱讀

    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 ?195次閱讀

    第五屆長(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 ?216次閱讀

    程序員節(jié)視頻創(chuàng)意大賽,用串口屏贏取千元大獎(jiǎng)

    10月24日,程序員專屬的節(jié)日里,我們盛大開(kāi)啟“程序員節(jié)視頻創(chuàng)意大賽”特別活動(dòng)!這不僅是場(chǎng)視覺(jué)的盛宴,更是智慧與創(chuàng)意的璀璨碰撞。我們誠(chéng)摯邀請(qǐng)每
    的頭像 發(fā)表于 07-08 10:38 ?72次閱讀
    <b class='flag-5'>程序員</b>節(jié)視頻創(chuàng)意大賽,用串口屏贏取千元大獎(jiǎng)

    程序員節(jié)視頻創(chuàng)意盛宴,邀您共襄盛舉!

    10月24日,程序員專屬的節(jié)日里,我們盛大開(kāi)啟“程序員節(jié)視頻創(chuàng)意大賽”特別活動(dòng)!這不僅是場(chǎng)視覺(jué)的盛宴,更是智慧與創(chuàng)意的璀璨碰撞。我們誠(chéng)摯邀請(qǐng)每
    的頭像 發(fā)表于 07-04 09:00 ?67次閱讀
    <b class='flag-5'>程序員</b>節(jié)視頻創(chuàng)意盛宴,邀您共襄盛舉!

    大模型時(shí)代,程序員當(dāng)下如何應(yīng)對(duì) AI 的挑戰(zhàn)

    隨著 AI 技術(shù)的飛速發(fā)展,特別是大模型的出現(xiàn),傳統(tǒng)的程序員角色正在經(jīng)歷深刻的變革,我們不得不重新對(duì)自己進(jìn)行審視和思考。 通用領(lǐng)域大模型的“泛化能力” 在過(guò)去的二十年內(nèi),AI 領(lǐng)域的大部分研究
    的頭像 發(fā)表于 06-28 16:19 ?563次閱讀
    大模型時(shí)代,<b class='flag-5'>程序員</b>當(dāng)下如何應(yīng)對(duì) AI 的挑戰(zhàn)

    適者生存,程序員最終會(huì)流向哪……

    程序員沒(méi)有永遠(yuǎn)的護(hù)城河!!就目前的互聯(lián)網(wǎng)大環(huán)境來(lái)看,it行業(yè)已經(jīng)是……
    的頭像 發(fā)表于 03-11 17:11 ?421次閱讀
    適者生存,<b class='flag-5'>程序員</b>最終會(huì)流向哪……

    瑞薩Flash程序員V3 發(fā)布說(shuō)明

    電子發(fā)燒友網(wǎng)站提供《瑞薩Flash程序員V3 發(fā)布說(shuō)明.pdf》資料免費(fèi)下載
    發(fā)表于 02-19 09:37 ?1次下載
    瑞薩Flash<b class='flag-5'>程序員</b>V3 發(fā)布說(shuō)明

    2024程序員的未來(lái)方向如何走?還看今朝

    這幾年的IT行業(yè)想必大家已經(jīng)感受到了,Android、Java、前端等等程序員都經(jīng)歷了大廠……
    的頭像 發(fā)表于 02-02 09:45 ?842次閱讀
    2024<b class='flag-5'>程序員</b>的未來(lái)方向如何走?還看今朝

    1月18號(hào)“純鴻蒙”千帆啟航,程序員預(yù)備!

    Android”、與互聯(lián)網(wǎng)大廠合作已達(dá)400+家、原生開(kāi)發(fā)薪資崗位來(lái)看。鴻蒙對(duì)程序員來(lái)說(shuō)無(wú)疑是條非常好的道路。 鴻蒙對(duì)程序員的影響 鴻蒙的出現(xiàn),首先直接影響的是程序員。鴻蒙直接切割
    發(fā)表于 01-16 22:13
    主站蜘蛛池模板: 成人天堂资源WWW在线| 久久囯产精品777蜜桃传媒| 忘忧草日本在线WWW日本| 日本精品久久久久中文字幕2| 日韩经典欧美一区二区三区| 十分钟免费观看高清视频大全| 胸大的姑娘中文字幕视频| 欧美 亚洲 日韩 中文2019| 精品亚洲欧美中文字幕在线看| 久久天天躁狠狠躁夜夜呲| 美女胸被男子强捏视频| 精品在线观看一区| 快播可乐网| 老师xxxx69动漫| 欧美eee114| 四虎影视永久无码精品| 日日夜夜影院在线播放| 午夜免费福利片| 在线 国产 欧美 专区| 99热这里只有精品6| 国产成人在线播放| 国产精品成人自拍| 国产v综合v亚洲欧美大片| 国产在线观看免费观看不卡| 久久这里只有热精品18| 日本熟妇乱妇熟色A片蜜桃亚洲| 午夜性色一区二区三区不卡视频| 亚洲综合色在线视频久| asian极品呦女xx农村| 国产精品一区第二页| 久久人妻少妇嫩草AV無碼| 日本免费xxx| 亚洲免费大全| japanesen女同| 国产色精品久久人妻99蜜桃麻豆| 国内精品视频在线播放一区| 麻豆出品国产AV在线观看| 天天久久影视色香综合网| 在线二区 中文 无码| 囯产免费精品一品二区三区视频| 国产精品久久大陆|