Дженерики в Котлине (вопросы инвариантности и ковариации)
abstract class Injector<T:BaseView> {
protected abstract val component: BaseComponent<T>
open fun inject(target: T) = component.inject(target)
}
Моя цель - включить следующее:
List<Injector<out BaseView>> injectors
список, содержащий разные форсункиinjectors.last().inject(target)
гдеtarget
это подтипBaseView
,
Но проблема в том, что если в списке нет (ковариация), то я не смогу ввести цели, которые являются подтипами BaseView
, Тип ввода inject
метод будет Nothing
,
С другой стороны, я не могу сделать его инвариантным, потому что список не будет принимать реализации вроде ActivityInjector<SubView>
,
У кого-нибудь есть идеи, как это можно решить?