AutoValue_AutoValue with Builders

原文

AutoValue 的 構(gòu)建者


AutoValue的介紹 (簡(jiǎn)單翻譯)中已經(jīng)包含了基本的使用客情,使用靜態(tài)工廠作為你的公共API其弊。但是在大部分情況(such as those laid out in Effective Java, 2nd Edition Item 2),你可能更傾向于讓你的調(diào)用者使用一個(gè)構(gòu)建者生成實(shí)例對(duì)象膀斋。

幸運(yùn)的是梭伐,AutoValue可以也可以生成帶有構(gòu)建者的類。這一頁(yè)介紹了怎么做概页。但是我們還是建議你先閱讀并理解AutoValue的基本使用籽御,AutoValue的介紹 练慕。

怎么使用帶有構(gòu)建者的AutoValue


就像在介紹里面說(shuō)的那樣惰匙,AutoValue的概念就是寫一個(gè)抽象的value class,AutoValue實(shí)現(xiàn)它铃将。構(gòu)建者的生成也是一樣的方法:制造一個(gè)抽象的構(gòu)造者類项鬼,并把它包含在抽象類里面,然后AutoValue就會(huì)生成他們的實(shí)現(xiàn)劲阎。

在<code>Animal.java</code>中

import com.google.auto.value.AutoValue;

@AutoValue
abstract class Animal {
    abstract String name();
    abstract int numberOfLegs();

    static Builder builder() {
        return new AutoValue_Animal.Builder();
    }

    @AutoValue.Builder
    abstract static class Builder {
        abstract Builder name(String value);
        abstract Builder numberOfLegs(int value);
        abstract Animal build();
    }
}

在實(shí)際應(yīng)用中绘盟,一些類和方法可能是public的并且?guī)в?strong>Javadoc,為了保證例子的簡(jiǎn)潔我們?nèi)サ袅诉@些悯仙。

使用

public void testAnimal() {
    Animal dog = Animal.builder().name("dog").numberOfLegs(4).build();
    assertEquals("dog", dog.name());
    assertEquals(4, dog.numberOfLegs());

    //You probably don't need to write assertions like; just illustrating.
    assertTrue(Animal.builder().name("dog").numberogLegs(4).build().equals(dog));
    assertFalse(Animal.builder().name("cat").numberogLegs(4).build().equals(dog));
    assertFalse(Animal.builder().name("dog").numberogLegs(2).build().equals(dog));

    assertEquals("Animal{name=dog, numberOfLegs=4}", dog.toString());
}

AutoValue 生成的代碼

警告


確保把這個(gè)靜態(tài)<code>builder()</code>方法直接放在你的value class 內(nèi)部(e.g.,<code>Animal</code>)龄毡,而不是內(nèi)部抽象<code>Builder</code>類。確保這個(gè)<code>Animal</code>類在<code>Builder</code>之前初始化锡垄。否則你可能遇到初始化順序問(wèn)題沦零。

我怎么... ? 簡(jiǎn)單翻譯/ ? 原文


  • ...使用(或不使用)<code>set</code>前綴?
  • ...使用不同命名除了<code>builder()</code>/<code>Builder</code><code>build()</code>?
  • ...為一個(gè)屬性制定默認(rèn)值货岭?
  • ...使用一個(gè)現(xiàn)有的 value 實(shí)例的值初始化一個(gè)構(gòu)建者路操?
  • ...在value class內(nèi)部包含<code>with-</code>方法,來(lái)生成一個(gè)略微修改的實(shí)例千贯?
  • ...驗(yàn)證屬性的值屯仗?
  • ...在構(gòu)建時(shí)正常化(修改)屬性的值搔谴?
  • ...同時(shí)暴露構(gòu)造器和工廠方法魁袜?
  • ...處理<code>Optional</code>屬性?
  • ...使用一個(gè)集合屬性敦第?
  • ...讓構(gòu)建者累積一個(gè)集合屬性的值(而不是一次全部給出)慌核?
  • ...在不打破鏈?zhǔn)秸{(diào)用的前提下累積集合的值?
  • ...對(duì)于同一個(gè)集合屬性提供設(shè)置值的兩種方式(一次性提供和累積提供)申尼?
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末垮卓,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子师幕,更是在濱河造成了極大的恐慌粟按,老刑警劉巖诬滩,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異灭将,居然都是意外死亡疼鸟,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門庙曙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)空镜,“玉大人,你說(shuō)我怎么就攤上這事捌朴∥庠埽” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵砂蔽,是天一觀的道長(zhǎng)洼怔。 經(jīng)常有香客問(wèn)我,道長(zhǎng)左驾,這世上最難降的妖魔是什么镣隶? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮诡右,結(jié)果婚禮上安岂,老公的妹妹穿的比我還像新娘。我一直安慰自己帆吻,他們只是感情好域那,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著桅锄,像睡著了一般琉雳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上友瘤,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天翠肘,我揣著相機(jī)與錄音,去河邊找鬼辫秧。 笑死束倍,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的盟戏。 我是一名探鬼主播绪妹,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼柿究!你這毒婦竟也來(lái)了邮旷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蝇摸,失蹤者是張志新(化名)和其女友劉穎婶肩,沒(méi)想到半個(gè)月后办陷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡律歼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年民镜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片险毁。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡制圈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出畔况,到底是詐尸還是另有隱情鲸鹦,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布问窃,位于F島的核電站亥鬓,受9級(jí)特大地震影響完沪,放射性物質(zhì)發(fā)生泄漏域庇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一覆积、第九天 我趴在偏房一處隱蔽的房頂上張望听皿。 院中可真熱鬧,春花似錦宽档、人聲如沸尉姨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)又厉。三九已至,卻和暖如春椎瘟,著一層夾襖步出監(jiān)牢的瞬間覆致,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工肺蔚, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留煌妈,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓宣羊,卻偏偏與公主長(zhǎng)得像璧诵,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子仇冯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理之宿,服務(wù)發(fā)現(xiàn),斷路器苛坚,智...
    卡卡羅2017閱讀 134,715評(píng)論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法比被,類相關(guān)的語(yǔ)法坪创,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法姐赡,異常的語(yǔ)法莱预,線程的語(yǔ)...
    子非魚_t_閱讀 31,665評(píng)論 18 399
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,865評(píng)論 6 342
  • 1 場(chǎng)景問(wèn)題# 1.1 繼續(xù)導(dǎo)出數(shù)據(jù)的應(yīng)用框架## 在討論工廠方法模式的時(shí)候,提到了一個(gè)導(dǎo)出數(shù)據(jù)的應(yīng)用框架项滑。 對(duì)于...
    七寸知架構(gòu)閱讀 5,760評(píng)論 1 64
  • 為期25天的高一銜接班至今天下午就要結(jié)束了依沮,回顧過(guò)去的二十多天,我感慨萬(wàn)千枪狂。兒子自幼兒園至中考結(jié)束危喉,什么特長(zhǎng)班、學(xué)...
    雲(yún)行天下閱讀 266評(píng)論 10 6