Как правильно обрабатывать универсальные типы? - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь создать пользовательскую функцию, которая будет обрабатывать все мои ответы API, но я не знаю, как правильно обрабатывать ее.

Это мой код

Мой пользовательский обратный вызов

interface ResponseCallback<T> {
    fun onSuccess(response: T)
    fun onError(code: Int, message: String)
}

Вот как я называю мой запрос API

createRequest(getLogin(id), object : API.ResponseCallback<LoginResponse>{
    override fun onError(code: Int, message: String) {
    }

    override fun onSuccess(response: LoginResponse) {
    }
})

, и именно так я обрабатываю свой запрос

fun createRequest(source: Observable<*>, callback: ResponseCallback<*>) {
    disposable.add(
        source.subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(
                { it ->
                    //
                    // callback.onSuccess(it)

                },
                {

                }
            )
    )
}

, но моя проблема здесь в том, чтоcallback.onSuccess() параметр Nothing и не может принять callback.onSuccess(it)

Пожалуйста, помогите мне, спасибо.

1 Ответ

0 голосов
/ 02 марта 2019

Вы должны использовать проекции звезд , если вы не знаете конкретного параметра типа для универсального типа.Когда вы используете их, компилятор не позволит вам делать небезопасные действия с параметризованным типом.Например, вы увидели, что не можете передать какой-либо параметр в onSuccess, так как вы по существу сказали компилятору, что не знаете его тип.

Исправление тогдаэто вместо того, чтобы дать вашей createRequest функции параметр типа, и сделать Observable того же типа, а также обратный вызов, который вы хотите вызвать:

fun <T> createRequest(source: Observable<T>, callback: ResponseCallback<T>) {
    ...
    callback.onSuccess(it) // works, since you're passing in a T to a method that requires a T
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...