【发布时间】:2020-02-07 16:45:07
【问题描述】:
我有一个界面
private interface WithTokenExecutor<T> {
fun execute(token: Token): Single<T>
}
和一个异步获取访问令牌的函数 withToken 然后返回执行的WithTokenExecutor 参数和新令牌。
private fun <T> withToken(executor: WithTokenExecutor<T>): Single<T> {
return essentialApiTokenProvider.getTokenObservable(true) // returns an observable with the token
.flatMap { token -> executor.execute(token)) }
}
然后我调用函数:
fun getAppData(apps: List<String>): Single<AppsList> {
return withToken(object : WithTokenExecutor<AppsList> {
override fun execute(token: Token): Single<AppsList> {
return api.getDetails(token) // retuns a Single<AppsList>
}
})
}
这行得通,所以我的问题是,即使 withToken 和 WithTokenExecutor 函数的返回类型是通用的,是否可以将返回语句从匿名类更改为 lambda?
我试过这样做:
return withToken({ token -> api.getDetails(token) })
但是编译器说:
Type inference failed: fun <T> withToken(executor: StoreManager.WithTokenExecutor<T>):Single<T> cannot be applied to ((???) -> Single<AppsList>)
有没有办法明确定义这些函数的返回类型,同时仍然保留 lambda?
【问题讨论】:
-
您的
withToken函数不接受 lambdas 作为参数。您必须显式创建一个这样做的重载。允许您输入 lambda 而不是接口对象的功能接口仍处于 Kotlin 1.4 的规划阶段:blog.jetbrains.com/kotlin/2019/12/…
标签: kotlin lambda rx-java anonymous-function