У меня есть 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 как первый универсальный
Как я могу уменьшить эту сложность и избежать циклических ссылок, сохраняя при этом безопасность типов?