У меня есть следующие классы Kotlin:
sealed class Result {
data class Success()
data class Failure()
}
class Single<R>(val value: R?, throwable: Throwable?) {
fun map(mapper: (R) -> T): Single<T> {
return Single(mapper(value!!), null)
}
fun onError(recover: (Throwable) -> T): Single<T> {
return Single(recover(throwable!!))
}
}
И у меня есть следующая функция:
fun handle(single: Single<String>): Single<Result> {
return single
.map { Single.Success() }
.onError { Single.Error() }
}
Но onError
терпит неудачу с:
Type Mismatch.
Required: Single.Success
Found: Single.Error
Я понимаю, что могу обойти это с помощью:
fun handle(single: Single<String>): Single<Result> {
return single
.map { Single.Success() as Single<Result> }
.onError { Single.Error() as Single<Result> }
}
Но я предпочитаю, чтобы вывод типа работал так, как можно больше слева направо.То есть я бы предпочел, чтобы лямбда { Single.Success() }
указывала и явно возвращала тип возвращаемого значения.
Разрешен ли явный тип возвращаемого значения в Kotlin? functionLiteral Grammar делает его похожим, что не может, но я не эксперт в чтении грамматик.