我有以下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() }
lambda指定和显式的返回类型。
Kotlin是否允许使用显式返回类型?在functionLiteral语法使它看起来像它不能,但我不是在阅读语法方面的专家。
您实际上无法在Kotlin lambda中显式声明返回类型:
上面呈现的lambda表达式语法缺少的一件事是可以指定函数的返回类型。
https://kotlinlang.org/docs/reference/lambdas.html#anonymous-functions
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句