日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

完善資料讓更多小伙伴認識你,還能領取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(“情人節(jié)禮物”, “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={情人節(jié)禮物=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, “情人節(jié)禮物”, “LBR 1912女王時代”)

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

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

// 等等等等 。..

.build();

}

}

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

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

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

    關注

    20

    文章

    3012

    瀏覽量

    116878
  • 代碼
    +關注

    關注

    30

    文章

    4977

    瀏覽量

    74420

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    入門神器 | 尚硅谷51單片機視頻教程

    操作的最佳實踐。它讓程序員明白,軟件中的每一個賦值操作,本質上都是對硬件電路狀態(tài)的次改變,從而建立起扎實的底層操作思維。 三、 中斷與串口通信:系統(tǒng)響應與數據傳輸的機制 中斷機制是現代計算機操作系統(tǒng)
    發(fā)表于 05-01 17:34

    OpenClaw席卷全球!千人排隊“養(yǎng)龍蝦”,改寫AI硬件兩大走向

    近日,來自海外Github上的OpenClaw持續(xù)火爆。OpenClaw是由奧地利退休程序員彼得·斯坦伯格(Peter Steinberger)發(fā)起的開源項目,采用MIT開源協(xié)議的框架,能讓
    的頭像 發(fā)表于 03-09 11:35 ?1.2w次閱讀
    OpenClaw席卷全球!千人排隊“養(yǎng)龍蝦”,改寫AI硬件兩大走向

    堆棧的原理揭秘

    的用匯編指令去創(chuàng)建,刪除變量好麻煩!程序員也是人啊,于是為了擺脫繁瑣的重復勞動,棧被發(fā)明了出來。棧并不是純粹抽象的軟件概念,而是由包括esp,ebp這些實際存在的堆棧寄存器來支撐的。 下面講解這兩
    發(fā)表于 01-23 07:08

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

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

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

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

    程序員最常見謊言

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

    堆和棧的區(qū)別

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

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

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

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

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

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

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

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

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

    無法在調試中連接到PSOC4怎么解決?

    您好,我有塊使用 PSOC4 CY8C4013SXI-410 制作的小板。非常簡單的設備,它只有三 GPIO 引腳并通過 5 引腳 SWD 進行編程。我遇到的問題是程序員能夠看到該設備但無法對其進行編程。
    發(fā)表于 07-22 06:02

    程序設計與數據結構

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

    CY7C68013A無PID和VID,如何制作PDF?

    我用 CY7C68013A MCU 設計了 PCB,所以這意味著我不是程序員之類的。 但是我嘗試上傳些代碼,但沒有 PID 和 VID。 我找到了
    發(fā)表于 05-13 07:50

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

    矢量圖,讓工程師與UX團隊首次實現“無障礙協(xié)作”。 LVGL (Light and Versatile Graphics Library)的故事,像極了硅谷傳奇——始于程序員的“不爽
    的頭像 發(fā)表于 05-12 16:33 ?1429次閱讀
    從“代碼迷宮”到“視覺藍圖”——LVGL的嵌入式UI設計哲學!
    土默特右旗| 清河县| 溧水县| 曲水县| 大安市| 太仓市| 松原市| 周口市| 襄城县| 延边| 漳浦县| 普安县| 淮阳县| 拉孜县| 永宁县| 开鲁县| 凌海市| 扎赉特旗| 姚安县| 白玉县| 靖西县| 德格县| 沾化县| 滦平县| 岑巩县| 栖霞市| 左云县| 大洼县| 信宜市| 若尔盖县| 宿迁市| 东光县| 襄樊市| 额尔古纳市| 五台县| 宜春市| 绍兴市| 通河县| 新密市| 泗洪县| 河西区|