首页 > 解决方案 > Android 通用参数

问题描述

大家好,我在传递参数时遇到了一些问题。我有 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)
}

标签: androidgenericskotlinrx-java2

解决方案


只需通过在函数名称前加上 T 来声明函数将接收泛型,showRetryDialog 函数也必须是泛型的,否则将泛型类型转换为预期类型(不安全的类型转换)

override fun <T> onNoConnection(call :Observable<Response<T>>){
            mView.dismissProgressDialog()
            mView.showRetryDialog(call)
}

推荐阅读