記錄一個(gè)有趣的實(shí)現(xiàn)

定義在BaseFragment里的方法:

 /**
   * Gets a component for dependency injection by its type.
   */
 @SuppressWarnings("unchecked")
  protected <C> C getComponent(Class<C> componentType) {
    return componentType.cast(((HasComponent<C>) getActivity()).getComponent());
  }

HasComponent接口:

public interface HasComponent<C> {
  C getComponent();
}

具體Activity接上此接口并實(shí)現(xiàn)方法蜀涨。

@Override public UserComponent getComponent() {
    return userComponent;
  }

在BaseFragment子類里調(diào)用此方法獲得UserComponent對(duì)象并注入:

 this.getComponent(UserComponent.class).inject(this);

翻開布滿灰層的Java編程思想回憶一下相關(guān)概念:

泛化的Class引用:

Class引用總是指向某個(gè)Class對(duì)象童芹,它可以制造類的實(shí)例找颓,并包含可作用于這些實(shí)例的所有方法代碼稽物。它還包含該類的靜態(tài)成員,因此,Class引用表示的就是它所只想的對(duì)象的確切類型,而該對(duì)象便是Class類的一個(gè)對(duì)象仅醇。

Class<Integer> IntClass=int.class;
IntClass=Integer.class;
//IntClass=double.class   //illegal

向Class引用添加泛型語(yǔ)法的原因僅僅是為了提供編譯器類型檢查,因此如果你操作有誤魔种,稍后立即會(huì)發(fā)現(xiàn)這一點(diǎn)析二。而當(dāng)你將泛型語(yǔ)法用于Class對(duì)象時(shí):newInstance()會(huì)返回該對(duì)象的確切類型,而不僅是Object节预。
這在某些程度上有點(diǎn)受限:

Class<FancyToy> ftClass=FancyToy.class;
Class<? super FancyToy> up=ftClass.getSuperClass();
//This won't compile
//Class<Toy> up2=ftClass.getSuperclass();
//Only Produces Object;
Object obj=up.newInstance();

如果你手頭是超類叶摄,那編譯器將只允許你聲明超類引用是“某個(gè)類,它是FancyToy超類”,就像在
表達(dá)式Class<? super FancyToy> 所看到的安拟,而不會(huì)接受Class<Toy>這樣的聲明蛤吓。這看上去有點(diǎn)怪,因?yàn)間etSuperClass()方法返回的是基類(不是借口)糠赦,并且編譯器在編譯器就知道它是什么類型了----在本例中就是Toy.class----而不僅僅是“某個(gè)類会傲,它是FancyToy超類”.不管怎樣,正是由于這種含糊性愉棱,up.newInstance()返回值不是精確類型唆铐,而只是Object.

Cast:

cast()方法接受參數(shù)對(duì)象,并將其轉(zhuǎn)型為Class引用的類型奔滑。當(dāng)你編寫泛型代碼,如果你存儲(chǔ)了Class引用顺少,并希望以后通過(guò)這個(gè)引用來(lái)執(zhí)行轉(zhuǎn)型朋其,這種情況就會(huì)發(fā)生王浴。

Building b=new House();
Class<House> houseType=House.class;
House h=houseType.cast(b);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市梅猿,隨后出現(xiàn)的幾起案子氓辣,更是在濱河造成了極大的恐慌,老刑警劉巖袱蚓,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钞啸,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡喇潘,警方通過(guò)查閱死者的電腦和手機(jī)体斩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)颖低,“玉大人絮吵,你說(shuō)我怎么就攤上這事〕佬迹” “怎么了蹬敲?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)莺戒。 經(jīng)常有香客問(wèn)我伴嗡,道長(zhǎng),這世上最難降的妖魔是什么从铲? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任瘪校,我火速辦了婚禮,結(jié)果婚禮上食店,老公的妹妹穿的比我還像新娘渣淤。我一直安慰自己,他們只是感情好吉嫩,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布价认。 她就那樣靜靜地躺著,像睡著了一般自娩。 火紅的嫁衣襯著肌膚如雪用踩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天忙迁,我揣著相機(jī)與錄音脐彩,去河邊找鬼。 笑死姊扔,一個(gè)胖子當(dāng)著我的面吹牛惠奸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播恰梢,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼佛南,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼梗掰!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起嗅回,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤及穗,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后绵载,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體埂陆,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年娃豹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了焚虱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡培愁,死狀恐怖著摔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情定续,我是刑警寧澤谍咆,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站私股,受9級(jí)特大地震影響摹察,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜倡鲸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一供嚎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧峭状,春花似錦克滴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至胆敞,卻和暖如春着帽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背移层。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工仍翰, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人观话。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓予借,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蕾羊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法喧笔,類相關(guān)的語(yǔ)法帽驯,內(nèi)部類的語(yǔ)法龟再,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法尼变,線程的語(yǔ)...
    子非魚_t_閱讀 31,587評(píng)論 18 399
  • 整體Retrofit內(nèi)容如下: 1利凑、Retrofit解析1之前哨站——理解RESTful 2、Retrofit解析...
    隔壁老李頭閱讀 4,559評(píng)論 2 12
  • 對(duì)象的創(chuàng)建與銷毀 Item 1: 使用static工廠方法嫌术,而不是構(gòu)造函數(shù)創(chuàng)建對(duì)象:僅僅是創(chuàng)建對(duì)象的方法哀澈,并非Fa...
    孫小磊閱讀 1,963評(píng)論 0 3
  • “當(dāng)然,非常好辨認(rèn)度气,通過(guò)木質(zhì)層所含水分的程度就能看出割按,超過(guò)三個(gè)月的何首烏根部會(huì)呈現(xiàn)淡黃色,而且摸上去有點(diǎn)粗糙磷籍。有了...
    飄雲(yún)閱讀 283評(píng)論 0 1
  • 文/鐵爐 前幾天在天貓上選了一雙皮鞋丈氓,昨天下午收到了快遞,并且當(dāng)...
    湘邵鐵爐閱讀 903評(píng)論 12 14