大家好,我在传递参数时遇到了一些问题。我有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
}))
}
如何使函数的参数进行通用调用?
编辑
override fun onNoConnection(//need to be generic) {
mView.dismissProgressDialog()
mView.showRetryDialog(call)
}
答案 0 :(得分:4)
只需在函数名称前加上T即可声明该函数将接收通用代码, showRetryDialog函数也必须是通用的,否则检查实例和类型转换是否通用为预期的类型
override fun <T> onNoConnection(call :Observable<Response<T>>){
mView.dismissProgressDialog()
mView.showRetryDialog(call)
}
答案 1 :(得分:1)
好吧,您在两种方法上的调用定义不同:
·在initRetrofitCarList()
中,呼叫是Observable<Response<MyCarModel>>
·在initRetrofitBikeList()
中,呼叫是Observable<Response<MyBikeModel>>
因此,当您将此调用传递给另一个函数时,您需要请求通用Observable<Response<T>>
作为参数。