国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取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

    文章

    3001

    瀏覽量

    116434
  • 代碼
    +關注

    關注

    30

    文章

    4968

    瀏覽量

    73970

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    芯盾時代SDP助力企業應對核心機密泄露危機

    無論你是程序員、文案、財務,無論你想擼代碼、出海報、做報表,各式各樣的AI總能滿足你的需求,讓你的工作更加輕松。
    的頭像 發表于 12-26 11:49 ?665次閱讀

    大理的AI野心藏不住了——風花雪月中千名程序員探討人工智能

    2025 年12月4日至6日第二屆CCF程序員大會暨大理人工智能與應用國際開發者大會在大理圓滿落幕。
    的頭像 發表于 12-24 17:45 ?716次閱讀
    大理的AI野心藏不住了——風花雪月中千名<b class='flag-5'>程序員</b>探討人工智能

    程序員最常見謊言

    了。 28我已經測試過了,這個功能沒問題,可以上線了。 29別擔心,這個問題很快就能解決。 30代碼快寫完了,已經完成 90% 了 。 希望大家對程序員些容忍以及諒解! 各位程序員你們都被我說中了哪些?說說你們的觀點
    發表于 12-10 08:24

    堆和棧的區別

    由C/C 編譯的程序占用的內存分為以下幾個部分: 棧區(stack):由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。其操作方式類似于數據結構中的棧。 堆區(heap):
    的頭像 發表于 11-27 18:13 ?1084次閱讀

    軟通國際亮相2025沙中開源與AI科技峰會

    2025年11月11日,由沙特程序員協會(parmg)主辦的"2025沙中開源與AI科技峰會"在利雅得盛大啟幕。
    的頭像 發表于 11-14 17:45 ?1474次閱讀

    奔赴熱AI,碼力全開!Talkweb House@1024程序員日系列活動圓滿收官

    1024程序員日”系列活動至此劃上了圓滿句號。本屆1024程序員節以“AI構建世界,智能引領未來”為主題,廣邀技術大咖、產業領袖、企業代表與全球開發者齊聚星城
    的頭像 發表于 10-27 18:59 ?778次閱讀
    奔赴熱AI,碼力全開!Talkweb House@1024<b class='flag-5'>程序員</b>日系列活動圓滿收官

    開鴻智谷“以賽促學、以賽選才”|1024程序員節暨開源鴻蒙構建大會圓滿落幕!

    10月24日,由開鴻智谷聯合主辦的長沙1024程序員節暨開源鴻蒙構建大會在長沙圓滿落幕。本次活動以“湘聚長沙,共赴熱AI”為主題,通過技術分享與實戰競賽相結合的方式,著力培養“開源鴻蒙+AI”領域
    的頭像 發表于 10-27 17:58 ?704次閱讀
    開鴻智谷“以賽促學、以賽選才”|1024<b class='flag-5'>程序員</b>節暨開源鴻蒙構建大會圓滿落幕!

    如何打造屬于自己的手勢識別應用

    期小編給大家介紹了和MediaPipe的相遇之路,本期小編將帶著大家起來動手,如何打造屬于自己的手勢識別應用。
    的頭像 發表于 07-29 10:12 ?1151次閱讀
    如何打造<b class='flag-5'>一</b><b class='flag-5'>個</b>屬于<b class='flag-5'>自己</b>的手勢識別應用

    程序設計與數據結構

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

    從“代碼迷宮”到“視覺藍圖”——LVGL的嵌入式UI設計哲學!

    矢量圖,讓工程師與UX團隊首次實現“無障礙協作”。 LVGL (Light and Versatile Graphics Library)的故事,像極了硅谷傳奇——始于程序員的“不爽
    的頭像 發表于 05-12 16:33 ?1270次閱讀
    從“代碼迷宮”到“視覺藍圖”——LVGL的嵌入式UI設計哲學!

    嵌入式串口是最磨人的“小妖精”!

    今天我們來聊聊這個讓程序員又愛又恨的磨人小妖精——嵌入式串口。它就像你永遠猜不透的曖昧對象:明明用示波器都抓到波形了,它偏偏在終端給你表演“薛定諤的打印”;當你決定放棄治療,準備用ST-Link重新
    的頭像 發表于 04-07 11:58 ?798次閱讀
    嵌入式串口是最磨人的“小妖精”!

    計算機網絡排錯思路總結

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

    如何在 樹莓派 上編寫和運行 C 語言程序

    本很好的書是BrianKernighan和DennisRitchie所著的《TheCProgrammingLanguage》。這本書對經驗豐富的程序員和想學習C語
    的頭像 發表于 03-25 09:28 ?1156次閱讀
    如何在 樹莓派 上編寫和運行 C 語言<b class='flag-5'>程序</b>?

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

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

    Gemini Vision + Raspberry Pi 化身“數字導盲犬”?

    本文討論了程序員利用樹莓派、攝像頭、Gemini和Python構建PeregrineEye設備,使其成為“數字導盲犬”為視障者服務的項目經歷,包括項目靈感、功能、構建過程、遇到的挑戰及未來計劃等
    的頭像 發表于 03-25 09:20 ?1923次閱讀
    Gemini Vision + Raspberry Pi 化身“數字導盲犬”?