Я хочу, чтобы мой NewsListSubscriber наследовал от подписчика RxJava, который использует общий тип, но я получаю ошибку «Тип несоответствия» при вызове метода выполнения UseCase. Я много раз читал страницу генериков из документации Kotlin, но я не могу найти решение.Kotlin: Как наследовать от RxJava Subscriber
Вот мой UseCase:
abstract class UseCase(private val threadExecutor: IThreadExecutor,
private val postExecutionThread: IPostExecutionThread) {
private var subscription = Subscriptions.empty()
fun execute(UseCaseSubscriber: rx.Subscriber<Any>) {
subscription = buildUseCaseObservable()
.subscribeOn(Schedulers.from(threadExecutor))
.observeOn(postExecutionThread.getScheduler())
.subscribe(UseCaseSubscriber)
}
protected abstract fun buildUseCaseObservable(): Observable<out Any>
fun unsubscribe() {
if (!subscription.isUnsubscribed) {
subscription.unsubscribe()
}
}
}
А вот как я это называю:
override fun loadNewsList() {
getNewsListInteractor.execute(NewsListSubscriber())
}
private inner class NewsListSubscriber : rx.Subscriber<List<NewsModel>>() {
override fun onCompleted() {// TODO}
override fun onError(e: Throwable) {// TODO}
override fun onNext(t: List<NewsModel>) {// TODO}
}
Ошибка
«Несоответствие типа Требуемый:. Rx.Subscriber. Найдено: Презентаторы.НовостиListPresenter.NewsListSubscriber "
в строке «выполнить (NewsListSubscriber()). Я пробовал играть с ключевыми словами «in» и «out», но у меня все еще такая же ошибка.
Является ли класс подписчика в методе так же, как и суперкомпоном rx.Subscriber во внутреннем классе? Просто проверить, не могу сказать точно здесь, не видя импорт. –
Да, я обновил свой код, чтобы использовать rx.Subscriber в обоих случаях. – MickaelG
'Подписчик' является эквивалентом 'Subscriber', который не совместим с более конкретными обозначениями. Решение состоит в том, чтобы ввести общий тип, который используется для вывода 'execute()' input и 'buildUsecase'. –
Kiskae