Kotlin Inheritance / Declaration with Generics
up vote
2
down vote
favorite
I'm trying to initiate the RoomAlarmRepository
inside the RepoInit 1 & 2.
The first one says "Type mismatch", and wouldn't let me compile. That is, unless I cast it like in RepoInit2
, at which point it tells me that the cast is unchecked.
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 {
}
I'm currently using the second one, as it actually works. I know I'm missing something where I declare the variable, but I'm not sure what it is.
generics inheritance kotlin
add a comment |
up vote
2
down vote
favorite
I'm trying to initiate the RoomAlarmRepository
inside the RepoInit 1 & 2.
The first one says "Type mismatch", and wouldn't let me compile. That is, unless I cast it like in RepoInit2
, at which point it tells me that the cast is unchecked.
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 {
}
I'm currently using the second one, as it actually works. I know I'm missing something where I declare the variable, but I'm not sure what it is.
generics inheritance kotlin
add a comment |
up vote
2
down vote
favorite
up vote
2
down vote
favorite
I'm trying to initiate the RoomAlarmRepository
inside the RepoInit 1 & 2.
The first one says "Type mismatch", and wouldn't let me compile. That is, unless I cast it like in RepoInit2
, at which point it tells me that the cast is unchecked.
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 {
}
I'm currently using the second one, as it actually works. I know I'm missing something where I declare the variable, but I'm not sure what it is.
generics inheritance kotlin
I'm trying to initiate the RoomAlarmRepository
inside the RepoInit 1 & 2.
The first one says "Type mismatch", and wouldn't let me compile. That is, unless I cast it like in RepoInit2
, at which point it tells me that the cast is unchecked.
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 {
}
I'm currently using the second one, as it actually works. I know I'm missing something where I declare the variable, but I'm not sure what it is.
generics inheritance kotlin
generics inheritance kotlin
asked Nov 10 at 17:45
sofakingforever
302110
302110
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
2
down vote
accepted
Declare the generic type it with the out
modifier as covariant.
See here https://kotlinlang.org/docs/reference/generics.html for details.
class RepoInit2(...) {
internal val repo: AlarmRepository<out AlarmModel> = RoomAlarmRepository(...)
}
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
2
down vote
accepted
Declare the generic type it with the out
modifier as covariant.
See here https://kotlinlang.org/docs/reference/generics.html for details.
class RepoInit2(...) {
internal val repo: AlarmRepository<out AlarmModel> = RoomAlarmRepository(...)
}
add a comment |
up vote
2
down vote
accepted
Declare the generic type it with the out
modifier as covariant.
See here https://kotlinlang.org/docs/reference/generics.html for details.
class RepoInit2(...) {
internal val repo: AlarmRepository<out AlarmModel> = RoomAlarmRepository(...)
}
add a comment |
up vote
2
down vote
accepted
up vote
2
down vote
accepted
Declare the generic type it with the out
modifier as covariant.
See here https://kotlinlang.org/docs/reference/generics.html for details.
class RepoInit2(...) {
internal val repo: AlarmRepository<out AlarmModel> = RoomAlarmRepository(...)
}
Declare the generic type it with the out
modifier as covariant.
See here https://kotlinlang.org/docs/reference/generics.html for details.
class RepoInit2(...) {
internal val repo: AlarmRepository<out AlarmModel> = RoomAlarmRepository(...)
}
answered Nov 10 at 18:26
Rene
1,13615
1,13615
add a comment |
add a comment |
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53241742%2fkotlin-inheritance-declaration-with-generics%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown