繁体   English   中英

Kotlin Lambda具有显式返回类型

[英]Kotlin lambda with explicit return type

我有以下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语法使它看起来像不可能,但是我不是阅读语法的专家。

这工作了! 有人在另一个论坛上给了我答案,如果他们在这里回答,我会标记为正确。

fun handle(single: Single<String>): Single<Result> {
  return single
    .map<Result> { Single.Success() }
    .onError<Result> { Single.Error() }
}

您实际上无法在Kotlin lambda中显式声明返回类型:

上面呈现的lambda表达式语法缺少的一件事是可以指定函数的返回类型。

https://kotlinlang.org/docs/reference/lambdas.html#anonymous-functions

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM