Kotlin Наследование / Декларация с родовыми - PullRequest
0 голосов
/ 10 ноября 2018

Я пытаюсь инициировать RoomAlarmRepository внутри RepoInit 1 & 2.

Первый говорит «Несоответствие типов», и не позволяет мне компилировать. То есть, если я не разыгрываю его, как в 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 {


}

Я сейчас использую второй, так как он на самом деле работает. Я знаю, что упускаю что-то, где я объявляю переменную, но я не уверен, что это такое.

Type mismatch Unchecked Cast

1 Ответ

0 голосов
/ 10 ноября 2018

Объявите универсальный тип с модификатором out как ковариантный. Подробнее см. Здесь https://kotlinlang.org/docs/reference/generics.html.

class RepoInit2(...) {
    internal val repo: AlarmRepository<out AlarmModel> = RoomAlarmRepository(...)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...