是否可以自动推断出通过的泛型类型?

时间:2019-08-28 19:06:39

标签: generics kotlin

我下一堂课:

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)

1 个答案:

答案 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)