Кинжал 2 котлина и дженерики - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь добавить мультисвязывание к моим подкомпонентам фрагмента, но у меня проблема с kotlin и дженериками. В основном у меня есть 2 интерфейса, Один для модулей:

@Module interface SbModule

И один для подкомпонентов interface SbSubcomponent Тогда у меня есть субкомпонентный строитель

interface SbBuilder<in A, out B> { fun module(module: A) fun build(): B }

Мой подкомпонент фрагмента расширяется SbSubcomponent, а его модуль расширяется SbModule, очевидно. тогда у меня есть строитель как:

@dagger.Subcomponent.Builder interface Builder: SbBuilder<Module, Subcomponent> {}

И проблема начинается в действии, давайте опускаем привязку карты, чтобы сделать проблему более ясной, я подвожу свой Subcomponent.Builder к SbBuilder, но мне нужно точно указать типы, так как:

@Binds abstract fun fragmentBuilder(impl: Fragment.Subcomponent.Builder): SbBuilder<Fragment.Subcomponent.Module, Fragment.Subcomponent>

Если я попробую с дженериками, то SbModule и SbSubcomponent тогда я получаю

@Binds methods must have only one parameter whose type is assignable to the return type

И после того, как я точно укажу типы, я не могу ввести их как общие ... однако я могу привести их к общим после инъекции, и это хорошо, но это не главное, я также возился с @JvmSuppressWildcards, но нет Неважно, куда я их положу, всегда есть проблема. Должно быть, я что-то пропустил, но в настоящее время я понятия не имею, что

...