Yon*_*ans 1 generics android kotlin rx-java2
大家好,我在传递参数时遇到了一些问题。我有 2 个 API 调用,如果设备没有互联网连接,我需要将调用传递回另一个类,因为每个 api 都有不同的 pojo,android 给我警告不匹配类型。这是我的代码
override fun initRetrofitCarList(call: Observable<Response<MyCarModel>>) {
compositeDisposable.add(call
.map{
it.body()
}
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
if (it.status == Constants.Result.SUCCESS) {
mPresenter.successGetVehicleList(it.vehicle, "api")
} else {
mPresenter.failedGetVehicleList(it.message)
}
}, {
mPresenter.onNoConnection(call) <- this here will give WARNING because of mismatch type
}))
}
override fun initRetrofitBikeList(call: Observable<Response<MyBikeModel>>) {
compositeDisposable.add(call
.map{
it.body()
}
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
if (it.status == Constants.Result.SUCCESS) {
mPresenter.successGetVehicleList(it.vehicle, "api")
} else {
mPresenter.failedGetVehicleList(it.message)
}
}, {
mPresenter.onNoConnection(call) <- this here will give WARNING because of mismatch type
}))
}
Run Code Online (Sandbox Code Playgroud)
如何让函数的参数进行泛型调用?
编辑
override fun onNoConnection(//need to be generic) {
mView.dismissProgressDialog()
mView.showRetryDialog(call)
}
Run Code Online (Sandbox Code Playgroud)
只需通过在函数名之前放置 T 来声明函数将接收泛型,showRetryDialog 函数也必须是泛型的,否则将泛型类型转换为预期类型(不安全的类型转换)
override fun <T> onNoConnection(call :Observable<Response<T>>){
mView.dismissProgressDialog()
mView.showRetryDialog(call)
}
Run Code Online (Sandbox Code Playgroud)