我下一堂课:
open class Repository<TEntity: KeyEntity, TDao: BaseDao<TEntity>>(val dao: TDao) {
fun insert(entity: TEntity, callback: ActionCallback<TEntity>? = null) {
InsertAsyncTask(dao, callback).execute(entity)
}
}
当我指定某种DAO类型时,它包含有关TEntity
类型的信息。是否可以将类重写为仅可以提供一种类型的类?
class MyRepo : Repository<MyDao>(myDao)
代替
class MyRepo : Repository<MyEntity, MyDao>(myDao)
答案 0 :(得分:1)
不幸的是,科特林没有在类声明级别进行类型推断。
但是您的示例可以稍微简化,这可能可以解决您的问题。
由于TDao
不用作类型参数,因此可以将其从类声明中删除,然后将构造函数参数的隐式类型声明为BaseDao<TEntity>
,如下所示:
open class Repository<TEntity: KeyEntity>(
val dao: BaseDao<TEntity>
) {
fun insert(entity: TEntity, callback: ActionCallback<TEntity>? = null) {
InsertAsyncTask(dao, callback).execute(entity)
}
}
最后,类声明可以少一种类型:
class MyRepo : Repository<MyEntity>(myDao)