Я пытаюсь создать пользовательскую функцию, которая будет обрабатывать все мои ответы 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)
Пожалуйста, помогите мне, спасибо.





Вы должны использовать звездные проекции только в том случае, если вы не знаете конкретный параметр типа для универсального типа. Когда вы используете их, компилятор не позволит вам делать небезопасные вещи с параметризованным типом. Например, вы видели, что не можете передать какой-либо параметр в 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
...
}
Привет, ваш ответ действительно решает мою проблему, и, поскольку я новичок в kotlin и экспериментирую с какой-то пользовательской функцией, я просто также спрашиваю, что мне делать, если у меня есть несколько ответов на мой обратный вызов, например ResponseCallback<List<FirstClass>, List<SecondClass>, ThirdClass>?
Если вам нужна одна функция для получения ResponseCallback с этими параметрами, и они не всегда одного типа, вы можете решить эту проблему таким же образом, добавив в функцию дополнительные параметры универсального типа.
Вы читали документацию на kotlinlang.org/docs/reference/generics.html#generic-functions?