【问题标题】:Kotlin Inheritance / Declaration with Generics带有泛型的 Kotlin 继承/声明
【发布时间】:2018-11-10 17:45:52
【问题描述】:

我正在尝试在 RepoInit 1 和 2 中启动 RoomAlarmRepository

第一个说“类型不匹配”,不让我编译。也就是说,除非我像在 RepoInit2 中那样投射它,否则它会告诉我投射未被选中。

class RepoInit1(app: App) {
internal val repo: AlarmRepository<AlarmModel> = RoomAlarmRepository(app.database)
}

class RepoInit2(app: App) {
internal val repo: AlarmRepository<AlarmModel> = RoomAlarmRepository(app.database) as AlarmRepository<AlarmModel>
}


class RoomAlarmRepository(val database: AppDatabase) : AlarmRepository<RoomAlarmModel> {

}

class RoomAlarmModel : AlarmModel {


}

我目前正在使用第二个,因为它确实有效。我知道我在声明变量的地方遗漏了一些东西,但我不确定它是什么。

【问题讨论】:

    标签: generics inheritance kotlin


    【解决方案1】:

    使用out 修饰符将泛型类型声明为协变。 详情请见https://kotlinlang.org/docs/reference/generics.html

    class RepoInit2(...) {
        internal val repo: AlarmRepository<out AlarmModel> = RoomAlarmRepository(...)
    }
    

    【讨论】:

      猜你喜欢
      • 2018-02-28
      • 2017-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多