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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

程序員如何自己new一個對象

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

掃碼添加小助手

加入工程師交流群

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

程序員經常會遇到靈魂拷問:你有對象嗎?

沒有,但我可以 new 一個!

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

}

}

沒問題,老鐵!但如果對象的屬性太多,咋辦?

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(“淺棕色帶點微卷”);

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

hobby.add(“逛街”);

hobby.add(“購物”);

hobby.add(“買東西”);

myGirlFriend.setHobby(hobby);

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

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

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

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

myGirlFriend.setGift(gift);

// 等等等等 。..

}

}

GirlFriend{name=‘小美’

, age=18

, bust=33

, waist=23

, hips=33

, hobby=[逛街, 購物, 買東西]

, birthday=‘2001-10-26’

, address=‘上海浦東’

, mobile=‘18688888888’

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

, hairColor=‘淺棕色帶點微卷’

, gift={情人節禮物=LBR 1912女王時代, 生日禮物=迪奧烈焰藍金, 紀念日禮物=阿瑪尼紅管唇釉}

}

GirlFriend 是很美,但寫起來也太麻煩了吧。

說說缺點:實例化和設置屬性分開,不好維護;變量名重復寫。

莫慌,看法寶~

這里不再介紹其他 Builder 實現方式,直接祭出最實用的通用Builder:

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

先看看使用姿勢:

public class GirlFriend {

// 省略屬性 。..

// 省略 getter & setter 。..

// 為了演示方便,加幾個聚合方法

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, “淺棕色帶點微卷”)

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

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

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

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

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

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

// 等等等等 。..

.build();

}

}

看到了嗎!實例化和屬性設置在同一條語句執行,鏈式操作,一路點點點,清爽!

Talk is cheap, show me the code:

/**

* 通用的 Builder 模式構建器

*

* @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 參數 Consumer

*/

@FunctionalInterface

public interface Consumer1《T, P1》 {

void accept(T t, P1 p1);

}

/**

* 2 參數 Consumer

*/

@FunctionalInterface

public interface Consumer2《T, P1, P2》 {

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

}

/**

* 3 參數 Consumer

*/

@FunctionalInterface

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

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

}

}

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

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    20

    文章

    2989

    瀏覽量

    110264
  • 代碼
    +關注

    關注

    30

    文章

    4901

    瀏覽量

    70848

原文標題:你還在 new 對象嗎?Java8 通用 Builder 了解一下?

文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    程序設計與數據結構

    的地址)出發,采用推導的方式,深入淺出的分析了廣大C程序員學習和開發中遇到的難點。 2. 從方法論的高度對C語言在數據結構和算法方面的應用進行了深入講解和闡述。 3. 講解了絕大多數C程序員開發
    發表于 05-13 16:45

    計算機網絡排錯思路總結

    明人不說暗話,這篇文章我們來聊非常有用,同時也是程序員必備的技能,那就是網絡排錯思路大總結。
    的頭像 發表于 04-01 17:32 ?386次閱讀
    計算機網絡排錯思路總結

    零基礎入門:如何在樹莓派上編寫和運行Python程序

    種非常有用的編程語言,其語法易于閱讀,允許程序員使用比匯編、C或Java等語言更少的代碼行。Python編程語言最初實際上是作為Linux的腳本語言而開發的。Py
    的頭像 發表于 03-25 09:27 ?806次閱讀
    零基礎入門:如何在樹莓派上編寫和運行Python<b class='flag-5'>程序</b>?

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

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

    TMS320C6000程序員指南

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

    TMS320C55x DSP CPU程序員參考補充

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

    UCD3138A64/UCD3138128程序員手冊

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

    機械革命發布CODE AI程序員

    近日,英特爾新質生產力技術生態大會在成都舉行,機械革命作為重要參展商帶來了多款明星產品引爆全場!其中更是在AI PC軟件生態產品發布分論壇上,Intel、智譜、機械革命三方聯合發布了專為程序員設計的CODE AI程序員本,成為本次大會的
    的頭像 發表于 11-30 10:34 ?1130次閱讀

    Linux驅動程序程序員指南

    電子發燒友網站提供《Linux驅動程序程序員指南.pdf》資料免費下載
    發表于 11-22 15:53 ?0次下載
    Linux驅動<b class='flag-5'>程序</b><b class='flag-5'>程序員</b>指南

    AI編程工具會不會搶程序員飯碗

    AI編程工具可輔助編程,減少手動編碼,提升效率,對程序員有積極影響也有挑戰。程序員需深化技能、拓寬知識應對。長遠看,AI與人類程序員將共生共榮。
    的頭像 發表于 11-08 10:17 ?545次閱讀

    程序員去面試只需技能征服所有面試官!

    車輛工程專業的研究生去面試,面試官最后問他會不會嵌入式。雖然應聘的崗位不是嵌入式工程師,但看來老板還是希望他能懂點這方面的知識。這個小插曲就說明了重要的就業
    的頭像 發表于 11-05 19:35 ?577次閱讀
    <b class='flag-5'>程序員</b>去面試只需<b class='flag-5'>一</b><b class='flag-5'>個</b>技能征服所有面試官!

    軟通動力子公司鴻湖萬聯助陣鴻蒙1024程序員節成功舉辦

    10月24日,在武漢、成都、深圳等地政府指導下,鴻蒙生態服務公司舉辦了場面向廣大開發者的盛會——鴻蒙1024程序員節暨鴻蒙原生應用交流會。軟通動力子公司鴻湖萬聯作為開源鴻蒙生態的重要參與者和貢獻者
    的頭像 發表于 10-29 15:49 ?765次閱讀
    軟通動力子公司鴻湖萬聯助陣鴻蒙1024<b class='flag-5'>程序員</b>節成功舉辦

    第五屆長沙·中國1024程序員節開幕

    據官方媒體報道,10月24日;? 第五屆長沙·中國1024程序員節在湖南湘江新區開幕;本次中國1024程序員節以“智能應用新生態”為主題。設置有岳麓對話、技術英雄會、主題峰會及賽事、展覽等活動,
    的頭像 發表于 10-25 15:42 ?509次閱讀

    socket對應連接嗎

    的接口,允許在不同計算機之間建立連接,進行數據交換。socket可以看作是兩程序之間的通信端點,由IP地址和端口號唯標識。
    的頭像 發表于 08-16 10:55 ?947次閱讀

    技術干貨驛站 ▏深入理解C語言:掌握程序結構知識

    在計算機編程的世界中,C語言被廣泛認可為門強大而高效的編程語言,其簡潔的語法和直接的指令使得它成為了許多程序員的首選。了解C語言的程序結構和基本語法對于初學者來說至關重要。從
    的頭像 發表于 07-27 08:45 ?1872次閱讀
    技術干貨驛站 ▏深入理解C語言:掌握<b class='flag-5'>程序</b>結構知識
    主站蜘蛛池模板: 99在线精品国自产拍 | 亚洲国产欧美国产综合在线 | 99re久久这里只有精品 | 学生无码AV一区二区三区 | 双性被疯狂灌满精NP | 伊人久久久久久久久香港 | 好看AV中文字幕在线观看 | 色欲人妻无码AV精品一区二区 | 午夜影院美女 | 在线观看成年人免费视频 | 亚洲精品久久久久AV无码 | 扒开胸罩揉她的乳尖视频 | 含羞草国产亚洲精品岁国产精品 | 超碰在线视频97 | 亚洲欧美一区二区三区四区 | 久久不射视频 | 久久re这里精品23 | 亚洲AV久久无码精品国产网站 | 日本精品久久久久中文字幕 1 | 亚洲成年男人的天堂网 | 麻豆狠色伊人亚洲综合网站 | 国产精品久久久久影院色老大 | 精品一产品大全 | 国产亚洲精品久久久久小 | 国产亚洲va在线电影 | 国产一区日韩二区欧美三区 | 狠狠躁日日躁人人爽 | 欧美精品v欧洲高清 | 亚洲欧美一区二区三区九九九 | 亚洲精品久久久久久久蜜臀老牛 | 日本久久精品视频 | 国产麻豆精品传媒AV国产在线 | 最新老头恋老OLDMAN | 精品久久久久中文字幕加勒比东京热 | 亚洲 日本 中文字幕 制服 | 日韩精品真人荷官无码 | 久久99国产精品蜜臀AV | 最近最新中文字幕MV高清在线 | 好男人在线视频 | 免费乱理伦片在线观看八戒 | 狠狠狠狠狠狠干 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品