简体   繁体   English

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

[英]Java generic to Kotlin generic. Return generic from method

Trying to convert a project from Java to Kotlin. 试图将项目从Java转换为Kotlin。

I got stuck on a method that returns ObservableTransformer from RXJava 2 我遇到了一个从RXJava 2返回ObservableTransformer的方法

Java Java的

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

Converting this using intellij ide throws an error. 使用intellij ide转换它会引发错误。

Java to Kotlin using ide Java使用ide到Kotlin

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

Does anyone have an idea to convert the above Java code to Kotlin? 有没有人有想法将上述Java代码转换为Kotlin?

Thanks in advance 提前致谢

Your code is returning a function which accepts observable of unknown type and returns an Observable object. 您的代码返回一个函数,该函数接受observable的未知类型并返回一个Observable对象。

The lambda expression you need should be like this: 你需要的lambda表达式应该是这样的:

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

Additionally to BakaWaii's response from above, you can further simplify the code as follows: 除了BakaWaii的上述回复之外,您还可以进一步简化代码,如下所示:

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

However, having two different it s might be confusing, so you might want to leave one of them as an explicit parameter. 但是,有两个不同的it S可能会发生会造成混乱,所以你可能要离开其中一个作为一个明确的参数。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM