Kotlin Lambda具有显式返回类型

希思边界

我有以下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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Kotlin NDArray具有带通用返回类型的lambda构造函数

显式类型参数Kotlin和RxJava

在Kotlin中具有可变数量的args的Lambda类型?

Lambda的显式返回类型

Kotlin-当表达式具有函数的返回类型

具有Springs ResponseEntity的Kotlin和通用返回类型

Kotlin - 具有泛型返回类型的抽象函数

Kotlin var在getter上具有不同的返回类型

具有未指定返回类型的Kotlin函数

具有Kotlin的Dagger 2,在ApplicationComponent中返回具有泛型的类型

Kotlin Result类型,具有泛型和Void / Nothing返回类型

Kotlin的reduce()函数具有不同的类型

Kotlin是否具有“特征”类型?

Kotlin中具有属性的函数类型

具有自动返回类型的特征转换 - 比显式返回类型效率低?

具有通用返回类型的访问者模式的Java / Kotlin强制转换异常

Kotlin允许与具有不同返回类型的属性getter相同的函数签名

在 C++ 中返回具有显式返回类型的多维数组

Kotlin:显式未命名的函数参数

Kotlin需要显式转换为Object

TypeScript:没有显式返回类型的lambda中不会检查多余的属性

如何从Kotlin的匿名lambda返回?

Kotlin:Lambda 中的多次返回

Kotlin:如果E是实现接口I的枚举类,则从具有返回类型Array <I>的函数返回Array <E>

Kotlin-提取变量快捷方式后,在IntelliJ中显式指定类型

对于调试,我希望在具有显式返回类型的函数中使用println

如何从Kotlin函数类型返回

Kotlin自定义简单DI-在调用实例化函数之前如何在没有显式声明的情况下知道类型?

在 Kotlin 中调用在 lambda 内具有参数的函数