为什么作者在一个项目中定义了一个空白接口?
以下代码来自项目https://github.com/skydoves/Pokedex
我不明白为什么作者需要定义一个空白接口Repository。
使用空白界面有Repository什么好处?
存储库.kt
/** Repository is an interface for configuring base repository classes. */
interface Repository
详细资料库.kt
class DetailRepository @Inject constructor(
private val pokedexClient: PokedexClient,
private val pokemonInfoDao: PokemonInfoDao
) : Repository {
...
}
主存储库.kt
class MainRepository @Inject constructor(
private val pokedexClient: PokedexClient,
private val pokemonDao: PokemonDao
) : Repository {
...
}
回答
它被称为标记界面模式。它是没有任何方法或常量的接口。通常创建这样的接口是为了为标记的类提供特殊的行为。你可以在java中找到几个这样的接口。例如Cloneable和Serializable。
在Pokedex 的情况下,我认为原因要简单得多。看起来这个界面只是为了对所有存储库进行分组而创建的。项目中从不使用存储库抽象。作者总是使用特定的实现。Repository 接口是多余的,但是当我们想要查找项目中的所有存储库时它会很有用 🙂