“一盤沙拉”帶你入門Dagger2(二)之帶引數怎麼辦
系列文章
如果被依賴類的建構函式帶有引數,要把這個引數的型別也管理起來
現在要在Salad裡新加入一個水果Orange,但是Orange的建構函式裡需要傳入一個Knife來切水果,那麼如何注入這個Orange呢?
新增的兩個類
public class Orange { Knife knife; public Orange(Knife knife){ this.knife=knife; knife.cut(); Log.e("TAG", "我是一個桔子"); } }
public class
修改SaladModule類,讓他管理Orange和Knife
一定要記得引入Knife,因為Salad的依賴Orange依賴了Knife,這是一個依賴鏈條,要把這個鏈條上的所有依賴,都管理起來。
@Module public class SaladModule { ......... // 引入建構函式帶引數的依賴
修改SaladComponent,同樣記得寫Knife
@Component(modules = {SaladModule.class})//指明要在那些Module裡尋找依賴 public interface SaladComponent { ......... //Salad的依賴Orange,而Orange又依賴了Knife,所以要把兩者都引入 //Orange provideOragne(Knife knife);//★注意:這裡千萬不能帶引數,否則報錯 Orange provideOragne(); Knife provideKnife(); //注意:下面的這個方法,表示要將以上的三個依賴注入到某個類中 //這裡我們把上面的三個依賴注入到Salad中 //因為我們要做沙拉 void inject(Salad salad); }
在目標類Salad裡注入依賴
public class Salad { ......... @Inject//注入桔子 Orange orange; @Inject//注入小刀(如果你想使用小刀物件,這裡要注入小刀,否則不用注入) Knife knife; public Salad() { // DaggerSaladComponent編譯時才會產生這個類, // 所以編譯前這裡報錯不要著急(或者現在你先build一下) SaladComponent saladComponent = DaggerSaladComponent.create(); saladComponent.inject(this);//將saladComponent所連線的SaladModule中管理的依賴注入本類中 makeSalad(pear, banana, saladSauce); } private void makeSalad(Pear pear, Banana banana, SaladSauce saladSauce) { Log.e("TAG", "我在攪拌製作水果沙拉"); } }
測試
09-01 13:34:35.532 10327-10327/com.demo.dagger2demo2 E/TAG: 我是一個梨 09-01 13:34:35.533 10327-10327/com.demo.dagger2demo2 E/TAG: 我是一個香蕉 09-01 13:34:35.533 10327-10327/com.demo.dagger2demo2 E/TAG: 我是沙拉醬 09-01 13:34:35.534 10327-10327/com.demo.dagger2demo2 E/TAG: 我是一個小刀 09-01 13:34:35.534 10327-10327/com.demo.dagger2demo2 E/TAG: 我可以切水果 09-01 13:34:35.534 10327-10327/com.demo.dagger2demo2 E/TAG: 我是一個桔子 09-01 13:34:35.534 10327-10327/com.demo.dagger2demo2 E/TAG: 我是一個小刀 09-01 13:34:35.534 10327-10327/com.demo.dagger2demo2 E/TAG: 我在攪拌製作水果沙拉
相關推薦
“一盤沙拉”帶你入門Dagger2(二)之帶引數怎麼辦
系列文章 如果被依賴類的建構函式帶有引數,要把這個引數的型別也管理起來 現在要在Salad裡新加入一個水果Orange,但是Orange的建構函式裡需要傳入一個Knife來
“一盤沙拉”帶你入門Dagger2(三)之@Qualifier
系列文章 當一個類有兩個建構函式時,使用Dagger2時,如何獲取指定建構函式new出來的物件 或者說雖然這有一個建構函式,但是這個建構函式new出了兩個具有不同屬性的
帶你Dart帶你Diao之類(二)
在上一篇部落格,筆者介紹了Dart類的構造方法 帶你Dart帶你Diao之類(一) 這一篇部落格是介紹Dart類的其他內容,主要包括: Getters和Setters 方法 抽象類和抽象方法 隱式介面 繼承 列舉 mi
SiteMesh入門篇(二)之包含靜態HTML導致亂碼問題。
首先要了解SiteMesh機制,因為他是過濾器,會攔截你的請求根據自己的規則給你返回,所有如果你沒有設定編碼,SiteMesh將會用自己編碼,預設編碼是ISO8859-1。至於為什麼亂碼建議去看看孫鑫講過一章關於亂碼的問題。 在一個網上有很多講解關於如果決絕包含HTML會導
NS2入門學習(二)之tcl指令碼示例
1、示例分析 tcl語法與python相差不多,以《NS與網路模擬》中的第一個tcl指令碼為例,學習如下:#建立一個Simulator物件的例項並把它賦值給變數ns set ns [new Simulator] #開啟一個名為linktrace.tr的檔案,用來記錄模擬過程
DQN(Deep Q-learning)入門教程(二)之最優選擇
在上一篇部落格:[DQN(Deep Q-learning)入門教程(一)之強化學習介紹](https://www.cnblogs.com/xiaohuiduan/p/12945449.html)中有三個很重要的函式: - 策略:$\pi(a|s) = P(A_t=a | S_t=s)$ - 狀態價值函式:
GAN網路從入門教程(二)之GAN原理
在一篇部落格[GAN網路從入門教程(一)之GAN網路介紹](https://www.cnblogs.com/xiaohuiduan/p/13237486.html)中,簡單的對GAN網路進行了一些介紹,介紹了其是什麼,然後大概的流程是什麼。 在這篇部落格中,主要是介紹其數學公式,以及其演算法流程。當然數學公
三篇文章帶你極速入門php(三)之php原生實現登陸註冊
區別 找不到 oot arr 字符串拼接 value 前端 信任 .get 看下成果 ps:純天然h5,絕不添加任何添加劑(css)以及化學成分(js)(<( ̄ ﹌  ̄)我就是喜歡純天然,不接受任何反駁) 關於本文 用原生的php和html做了一個登陸註冊,大概是可
三分鐘帶你入門 redis 高可用架構之哨兵
什麼是哨兵? 哨兵(Sentinel)是 redis 的高可用性解決方案,前面我們講的主從複製它是高可用的基礎,需要人工介入才能完成故障轉移,哨兵可以解決這個問題,在主從複製情況下,當主節點發生故障時,哨兵可以自動的發現故障並且完成故障轉移,實現真正的 redis 高可用。在哨兵叢集中,哨兵會監視所有的 re
樹義帶你學 Prometheus(三):Grafana 圖表配置快速入門
# 文章首發於【陳樹義】公眾號,點選跳轉到原文:https://mp.weixin.qq.com/s/sA0nYevO8yz6QLRz03qJSw 前面我們使用 Prometheus + Grafana 實現了一個簡單的 CPU 使用率變化圖,但是這個圖還有許多缺陷,例如:左邊欄的數值太小了無法調整,下面的
「mysql優化專題」這大概是一篇最好的mysql優化入門文章(1)
left 機械 增刪改查 靜態 命中 mysql查詢 關註 mysq 增刪改 優化,一直是面試最常問的一個問題。因為從優化的角度,優化的思路,完全可以看出一個人的技術積累。那麽,關於系統優化,假設這麽個場景,用戶反映系統太卡(其實就是高並發),那麽我們怎麽優化? 如果請
python3入門教程(二)操作資料庫(一)
概述 最近在準備寫一個爬蟲的練手專案,基本想法是把某新聞網站的內容分類爬取下來,儲存至資料庫,再通過介面對外輸出(提供後臺查詢介面)。那麼問題就來了,python到底是怎麼去操作資料庫的呢?我們今天就來研究下。 準備 我這邊資料庫使用的是mysql5.7,python去操作mysql
python3入門教程(二)操作數據庫一
pri 只需要 圖片 pytho 對象 ima cdc 一行 結果 概述 最近在準備寫一個爬蟲的練手項目,基本想法是把某新聞網站的內容分類爬取下來,保存至數據庫,再通過接口對外輸出(提供後臺查詢接口)。那麽問題就來了,python到底是怎麽去操作數據庫的呢?我們今天就來
帶你安裝迷你(mini)版的虛擬機器
一、建立虛擬機器 1、在VMware中的主頁中選擇“ 建立新的虛擬機器”: 2、點選下一步: 3、點選下一步: 4、點選下一步: 5、可以自定義設定虛擬機器名稱,修改虛擬機器的儲存位置,然後點選下一步: 6、點選下一步: 7、點
python3入門教程(二)操作資料庫一
import pymysql # 獲取連線 引數(資料庫IP,埠,使用者名稱,密碼,資料庫名稱,編碼格式) conn = pymysql.connect(host='127.0.0.1', port=3306,user='root', passwd='123456', db='news', charset
趙童鞋帶你入門PHP(四) PHP進階語法
閱讀時長:10分鐘 技術預備:PHP基礎語法 通過上一篇的學習,相信童鞋們已經大概瞭解了PHP的變數和陣列,這篇雖然叫進階語法,但其實也還是基礎語法,只是為了和上一篇做一個區別。(在程式設計界再怎麼高階的東西始終會在時間的車輪下變成基礎) 本節主要講解PHP的運算子、函式和麵向物件。 依照
帶你深入AI(1) - 深度學習模型訓練痛點及解決方法
系列文章,請多關注 Tensorflow原始碼解析1 – 核心架構和原始碼結構 自然語言處理1 – 分詞 帶你深入AI(1) - 深度學習模型訓練痛點及解決方法 帶你深入AI(2)- 深度學習啟用函式,準確率,優化方法等總結 帶你深入AI(3)- 物體分類領域:AlexNet VGG I
帶你深入AI(7)- 深度學習重要Python庫
系列文章,請多關注 Tensorflow原始碼解析1 – 核心架構和原始碼結構 自然語言處理1 – 分詞 帶你深入AI(1) - 深度學習模型訓練痛點及解決方法 帶你深入AI(2)- 深度學習啟用函式,準確率,優化方法等總結 帶你深入AI(3)- 物體分類領域:AlexNet VGG I
帶你深入AI(6)- 詳解bazel
系列文章,請多關注 Tensorflow原始碼解析1 – 核心架構和原始碼結構 自然語言處理1 – 分詞 帶你深入AI(1) - 深度學習模型訓練痛點及解決方法 帶你深入AI(2)- 深度學習啟用函式,準確率,優化方法等總結 帶你深入AI(3)- 物體分類領域:AlexNet VGG I
帶你深入AI(5)- 自然語言處理領域:RNN LSTM GRU
系列文章,請多關注 Tensorflow原始碼解析1 – 核心架構和原始碼結構 自然語言處理1 – 分詞 帶你深入AI(1) - 深度學習模型訓練痛點及解決方法 帶你深入AI(2)- 深度學習啟用函式,準確率,優化方法等總結 帶你深入AI(3)- 物體分類領域:AlexNet VGG I