J'ai rencontré un problème étrange que j'ai du mal à comprendre. J'ai écrit un code qui crée un observable de callable. Il compile bien, mais dès que je spécifie un planificateur pour cela, il change le type de retour et ne compile pas.L'ajout de subscribeOn() modifie le type de retour de l'observable
Voici le code sans subscribeOn (qui compile):
/**
* Gets all the room bookings for the specified day
*/
override fun getRoomBookingsForDay(date: Date): Observable<Collection<Model.RoomBooking>> =
Observable.fromCallable {
Realm.getDefaultInstance().use { realm ->
// Get all the bookings that begin and end within the specified date
val dbRoomBookings =
realm.where(DBRoomBooking::class.java)
.greaterThan("timeFromUtc", date)
.lessThan("timeToUtc", date)
.findAllSorted("timeFromUtc")
if (dbRoomBookings.isEmpty()) {
emptyList()
} else {
dbRoomBookings.asSequence().map { dbRoomBooking ->
makeRoomBookingModel(dbRoomBooking)
}.filterNotNull().toList()
}
}
}
Et voici le code avec subscribeOn (qui ne compile pas):
/**
* Gets all the room bookings for the specified day
*/
override fun getRoomBookingsForDay(date: Date): Observable<Collection<Model.RoomBooking>> =
Observable.fromCallable {
Realm.getDefaultInstance().use { realm ->
// Get all the bookings that begin and end within the specified date
val dbRoomBookings =
realm.where(DBRoomBooking::class.java)
.greaterThan("timeFromUtc", date)
.lessThan("timeToUtc", date)
.findAllSorted("timeFromUtc")
if (dbRoomBookings.isEmpty()) {
emptyList()
} else {
dbRoomBookings.asSequence().map { dbRoomBooking ->
makeRoomBookingModel(dbRoomBooking)
}.filterNotNull().toList()
}
}
}.subscribeOn(AndroidRealmSchedulers.realmThread())
Le temps de compilation message d'erreur est:
Type mismatch.
Required: Observable<Collection<Model.RoomBooking>>
Found: Observable<List<Model.RoomBooking>!>!
Sûrement, en spécifiant le planificateur ne devrait pas changer le type qui est retourné? Des idées?
Je ne suis pas sûr mais ma première pensée est que (pas familier avec Kotlin) RxKotlin ne comprend pas les types d'héritage (comme Dagger), vous pouvez donc essayer de changer le retour de méthode pour Observable étend Collection. Encore une fois, une suggestion, pas familier avec la syntaxe de Kotlin. –
Inkognito