@Inject

DaggerはAndroid用DIライブラリ。

とてもつもなくわかりやすいdagger2(2.11)入門 - Qiita

まずは、@Injectで、指定のオブジェクトに依存性を注入をする。

プロジェクトを作成
プロジェクトを作成

プロジェクトを作成。

最新だと、APIレベルのせいかエラーなので上の記事と同じに。

idをtextview1に。

上の記事を参考に、CoffeeMakerはこのように。
@Injectは、依存性を注入するメンバフィールドやコンストラクタに付ける。
これで、勝手にそのフィールドオブジェクトを生成し格納してくれる。

MainActivityはこうする。

DaggerMainActivity_CoffeeShopは
DaggerMainActivity_CoffeeShopは

DaggerMainActivity_CoffeeShopは、

ビルドすると自動生成される
ビルドすると自動生成される

ビルドすると自動生成される。

あとは、HeaterBaseを元に、Heater1とHeater2、PumpBaseを元に、Pump1とPump2を定義。
(ここは省略。)

CoffeeMakerのheaterとpumpのクラスによって、

Heater1でPump1
Heater1でPump1

こうだったり、

こうだったり。
こうだったり。

こうだったり。

ただ、PumpがHeaterに依存する場合などでは、CoffeeMakerでのクラスの書き換えで依存を切り替えられない。
まあ、この状態では依存性の注入も何もあったもんじゃない。

Sample/dagger/annotationInject/annotationInject/AI/AI_ at master · bg1bgst333/Sample · GitHub