Kotlintypes不匹配编译错误:需要成功,findMyError

我遇到了以下代码不能在kotlin中编译的问题。

// StateModel.kt sealed class StateModel class Loading : StateModel() data class Success(val data: T) : StateModel() data class MyError(val message: String) : StateModel() // StateModelTransformer.kt class StateModelTransformer : FlowableTransformer { override fun apply(upstream: Flowable): Publisher { return upstream .map { data -> Success(data) } .onErrorReturn { error -> MyError(error.message) // compile error, Type mismatch, Require Success, Found MyError } .startWith(Loading()) // compile error, none of the following function can be called with the arguments supplied } } 

我不知道为什么onErrorReturn说需要一个Successtypes,但一个StateModeltypes。

谢谢

One Solution collect form web for “Kotlintypes不匹配编译错误:需要成功,findMyError”

以下是Flowable中的相关声明,供参考。 让我们忽略onErrorReturn ; 这与这个问题没有关系。

 public Flowable { public  Flowable map(Function< ? super T, ? extends R> mapper); public Flowable startWith(T value); } 

这些是Kotlin推断的types。

 val upstream: Flowable val mapper: (T) -> Success = { data -> Success(data) } val map: ((T) -> Success) -> Flowable> = upstream::map val mapped: Flowable> = map(mapper) val loading: Loading = Loading() val startWith: (Success) -> Flowable> = mapped::startWith startWith(loading) // type mismatch 

更具体的Successtypes已经被推断出来了,Kotlin不会回溯到find更一般的StateModeltypes。 为了强制这种情况发生,例如,可以手动声明types

 // be explicit about the general type of the mapper upstream.map { data -> Success(data) as StateModel }.startWith(Loading()) // be explicit about the generic type R = StateModel upstream.map { data -> Success(data) }.startWith(Loading()) 

顺便提一句,你现在在StateModel输了 。 我建议改变基类以包含types参数。

 sealed class StateModel object Loading : StateModel() data class Success(val data: T) : StateModel() data class MyError(val message: String) : StateModel() 

这会让你写,例如,

 val  StateModel.data: T? get() = when (this) { is Success -> data else -> null } 
  • 如何检测我在一个航点附近
  • Kotlin使用Gson的JSONParser解析对象数组
  • 如何正确使用Kotlin Android的URL
  • 将android hashmap转换为kotlin
  • 错误:实体类必须使用@Entity进行注释
  • 如何在values / ids.xml中获得自定义ID的引用
  • Java活动不会在布局中显示任何视图
  • 'when'语句跳过Android的Kotlin条件
  • Android活动重新崩溃的应用程序“碎片不再存在”Kotlin
  • 错误:链接引用失败。 - > QueuedJob
  • Kotlin View setEnabled函数缺失?
  • Kotlin language will be the best programming language for Android.