我正在使用Retrofit在Android中编写API客户端,这种代码会重复出现:
myObservableFromRetrofit
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnError(... print stack trace ...)
我想知道是否有一种技术可以避免重复这些内容。
我通过以下方式调用改造功能:
public Observable<?> commonObservable(Observable<?> observable) {
return observable
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnError(... print stack trace ...)
}
但是这会失去通用类型信息。
答案 0 :(得分:4)
您应该使用this blog post中详述的compose()运算符,而不是包装Observable。所以你有:
<T> Transformer<T, T> applySchedulers() {
return observable -> observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnError(... print stack trace ...)
}
你这样称呼:
myObservableFromRetrofit
.compose(applySchedulers())
或者,如果你在JDK 8以下编译:
myObservableFromRetrofit
.compose(this.<YourType>applySchedulers())
答案 1 :(得分:3)
将?
替换为T
并添加缺少的<T>
。这将允许Type Inference
正确完成。
public <T> Observable<T> commonObservable(Observable<T> observable) {
return observable
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnError(... print stack trace ...)
}
这是通配符捕获的问题。
在大多数情况下,您不必担心通配符捕获,除非您看到包含短语“capture of”的错误消息。
我假设你正在参考。 Here有关它的更多信息