jegvetinte
jegvetinte

Reputation: 13

Java generic to Kotlin generic. Return generic from method

Trying to convert a project from Java to Kotlin.

I got stuck on a method that returns ObservableTransformer from RXJava 2

Java

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

Converting this using intellij ide throws an error.

Java to Kotlin using ide

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?

Thanks in advance

Upvotes: 1

Views: 747

Answers (2)

Eduard B.
Eduard B.

Reputation: 6803

Additionally to BakaWaii's response from above, you can further simplify the code as follows:

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

However, having two different its might be confusing, so you might want to leave one of them as an explicit parameter.

Upvotes: 1

BakaWaii
BakaWaii

Reputation: 6992

Your code is returning a function which accepts observable of unknown type and returns an Observable object.

The lambda expression you need should be like this:

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

Upvotes: 2

Related Questions