Daggerを使う時、以下のようなコードをよく書くかと思います。
public interface IRepository {
Item fetch();
}
public class RepositoryImpl implements IRepository {
@Override
public Item fetch() {
// 何らかの実装
}
}
@Module
class Module {
@Provides
IRepository provideRepository(RepositoryImpl repository) {
return repository;
}
}
@Bindsを利用することで、上記と等価なコードを以下のように書くことができます。
@Modlule
abstract class Module {
@Binds
abstract IRepository provideRepository(RepositoryImpl repository);
}
前者と後者の違いをまとめると以下になります。
-
@Providesの代わりに@Bindsを利用していること - クラスとプロバイダメソッドが
abstractであること
記述量が減るため、プロバイダメソッドを書くのが楽になります。
しかし、同一Module内に@Providesを利用したプロバイダメソッドを定義することはできないので、そこだけ注意が必要です。