Java泛型到Kotlin泛型。从方法返回泛型

Java泛型到Kotlin泛型。从方法返回泛型,java,kotlin,rx-java2,Java,Kotlin,Rx Java2,正在尝试将项目从Java转换为Kotlin 我遇到了一个从RXJava2返回ObservateTransformer的方法 爪哇 protectedobservetTransformer onNetworkError(){ 返回可观察->可观察 .doError(可丢弃->网络错误.setValue(可丢弃)); } 使用intellij ide转换此文件会引发错误 使用ide从Java到Kotlin protected fun <T> onNetworkError(): Obse

正在尝试将项目从Java转换为Kotlin

我遇到了一个从RXJava2返回ObservateTransformer的方法

爪哇

protectedobservetTransformer onNetworkError(){
返回可观察->可观察
.doError(可丢弃->网络错误.setValue(可丢弃));
}
使用intellij ide转换此文件会引发错误

使用ide从Java到Kotlin

protected fun <T> onNetworkError(): ObservableTransformer<T, T> {
    return { observable ->
        observable
                .doOnError({ throwable -> networkError.setValue(throwable) })
    }
}
networkerror():ObservableTransformer{
返回{可观察->
可观察
.doError({throwable->networkError.setValue(throwable)})
}
}
有没有人想到把上面的Java代码转换成Kotlin


提前感谢

您的代码正在返回一个函数,该函数接受未知类型的
可观察
,并返回一个
可观察
对象

您需要的lambda表达式应如下所示:

protected fun <T> onNetworkError(): ObservableTransformer<T, T> {
    return ObservableTransformer { observable ->
        observable
                .doOnError({ throwable -> networkError.setValue(throwable) })
    }
}
networkerror():ObservableTransformer{
返回ObservateTransformer{observable->
可观察
.doError({throwable->networkError.setValue(throwable)})
}
}

除上述BakaWaii的回复外,您还可以进一步简化代码,如下所示:

protected fun <T> onNetworkError(): ObservableTransformer<T, T> {
    return ObservableTransformer {
        it.doOnError { networkError.setValue(it) }
    }
}
networkerror():ObservableTransformer{
返回式可观测转换器{
it.doError{networkError.setValue(it)}
}
}

但是,使用两个不同的
it
s可能会令人困惑,因此您可能希望将其中一个作为显式参数。

谢谢!我一直在寻找简化代码的方法。我把巴卡瓦伊作为正确答案,因为他是第一个写这篇文章的人。
protected fun <T> onNetworkError(): ObservableTransformer<T, T> {
    return ObservableTransformer {
        it.doOnError { networkError.setValue(it) }
    }
}