Kotlin Cyclic Generics - PullRequest
       2

Kotlin Cyclic Generics

0 голосов
/ 02 января 2019

У меня есть 3 класса Router, Interactor и Component, а в Java у меня есть

Interactor<R extends Router>
Router<C extends InteractorComponent, I extends Interactor>
Component<I extends Interactor>

Когда я конвертирую в Kotlin, я получаю

Interactor<Self : Interactor<Self, R>, R> :
LifecycleScopeProvider<InteractorEvent> where R : Router<R, *, Self>

Router<Self : Router<Self, C, I>, in C, I>(
component: C,
private val interactor: I) where C : Component<I>, I : Interactor<I, Self>

Component<I : Interactor<I, *>>

Однако дальше вниз с некоторыми подклассами Router -> ViewRouter (который просто добавляет вид) -> PagerViewRouter, я сталкиваюсь с этим

PagerViewRouter<V, C, I>(
view: V,
component: C,
interactor: I) : ViewRouter<PagerViewRouter<V, C, I>, V, C, I>(
view,
component,
interactor) where V : View, C : Component<I>, I : ViewInteractor<I, PagerViewRouter<V, C, I>, *>

Когда я пытаюсь объявить список этих PagerViewRouters, каждый из которых может иметь разные конкретные типы, я получаю сообщение об ошибке, что тип ViewInteractor находится за пределами

MutableList<PagerViewRouter<
        out View,
        out InteractorComponent<out ViewInteractor<*, *, *>>,
        out ViewInteractor<*, *, *>>>

Обновление до ошибки в основном приводит к бесконечным обновлениям, поскольку ViewInteractor, как и Interactor, ссылается на Self как первый универсальный

Как я могу уменьшить эту сложность и избежать циклических ссылок, сохраняя при этом безопасность типов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...