Java通用于Kotlin泛型。从方法返回泛型

时间:2017-08-08 15:30:28

标签: java kotlin rx-java2

尝试将项目从Java转换为Kotlin。

我遇到了一个从RXJava 2返回ObservableTransformer的方法

爪哇

protected <T> ObservableTransformer<T, T> onNetworkError() {
    return observable -> observable
            .doOnError(throwable -> networkError.setValue(throwable));
}

使用intellij ide转换它会引发错误。

Java to Kotlin using ide

protected fun <T> onNetworkError(): ObservableTransformer<T, T> {
    return { observable ->
        observable
                .doOnError({ throwable -> networkError.setValue(throwable) })
    }
}

有没有人有想法将上述Java代码转换为Kotlin?

提前致谢

2 个答案:

答案 0 :(得分:2)

您的代码返回的函数接受未知类型的observable并返回Observable个对象。

你需要的lambda表达式应该是这样的:

protected fun <T> onNetworkError(): ObservableTransformer<T, T> {
    return ObservableTransformer { observable ->
        observable
                .doOnError({ throwable -> networkError.setValue(throwable) })
    }
}

答案 1 :(得分:1)

除了BakaWaii的上述回复之外,您还可以按如下方式进一步简化代码:

protected fun <T> onNetworkError(): ObservableTransformer<T, T> {
    return ObservableTransformer {
        it.doOnError { networkError.setValue(it) }
    }
}

但是,有两个不同的it可能会造成混淆,因此您可能希望将其中一个作为显式参数。