Есть такой метод который сидит в Java
классе
addDelegate(@NonNull AdapterDelegate<T> delegate)
то есть я могу ему передать любой обьект который наследует от AdapterDelegate
Создаю файл Kotlin
TimelineDelegate
который наследует AbsListItemAdapterDelegate
(это обстрактный класс который наследует от нужного нам AdapterDelegate
)
Вот он код на Kotlin
class TimelineDelegate(callback: Callback):
AbsListItemAdapterDelegate<BaggageTimelineItem, IRootInterface<List<MyObj>>,
TimelineDelegate.ViewHolder>()
{
override fun onCreateViewHolder(parent: ViewGroup): ViewHolder
{
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun isForViewType(item: IRootInterface<List<MyObj>>, items:
MutableList<IRootInterface<List<MyObj>>>, position: Int): Boolean
{
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun onBindViewHolder(p0: BaggageTimelineItem, p1: ViewHolder, p2: MutableList<Any>)
{
TODO("not implemented") //To change body of created functions use File |
Settings | File Templates.
}
class ViewHolder(view: View): BaseHolder<List<MyObj>>(view)
{
override fun onBind(iItem: List<MyObj>?)
{
TODO("not implemented") //To change body of created functions use
File | Settings | File Templates.
}
}
}
interface Callback: ClickListener
И вот так я это все собираю в кучу
addDelegate(new TimelineDelegate(new Callback()
{
@Override
public void onClick()
{
}
}));
И получаю ошибку которая говорит, что метод addDelegate()
собирается получить как параметр обьект типа AdapterDelegate
, а я ему типо передаю обьект типа TimelineDelegate
, то есть он не видит, что TimelineDelegate
наследуют он AdapterDelegate
.
Когда класс TimelineDelegate
написан на Java
то все работает. Я так понимаю, что нужно как то сообщить компилятору, что там есть наследование, чтоб он как то обратил на это внимание.
Что делаю не так?
EDIT
Я понял, что проблема в том, что TimelineDelegate
наследует от AbsListItemAdapterDelegate
которому нужно передать 3 типа дженериков. И как видно второй тип это интерфейс IRootInterface<List<MyObj>>
который как видно тоже требует получить тип дженерика List<MyObj>
.
Так вот разница между джавой и котлин в том, что джава не требует определять тип дженерика который передается сам как тип. То есть можно написать вот так
class TimelineDelegate(callback: Callback):
AbsListItemAdapterDelegate<BaggageTimelineItem, IRootInterface>,
TimelineDelegate.ViewHolder>()
Просто сказать, что второй тип будет IRootInterface
, котлин же не позволяет этого сделать. И поэтому когда я пытаюсь передать этот обьект как параметр в метод addDelegate()
он не принимает его, так как он хочет получить параметр типа AdapterDelegate<IRootInterface>
, а у меня получается обьект типа AdapterDelegate<IRootInterface<List<MyObj>>
Так вот теперь вопрос. Как с этим жить?))
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
На фото ниже - наглядная схема метода Systemarraycopy()
Абстра́кция в объектно-ориентированном программировании — это использование только тех характеристик объекта, которые с достаточной...
У меня бизнес логика перемешена с UIКак отделить бизнес логику в отдельный класс, экземпляр которого может генерировать значения больше и меньше...
Если метод сook в конечном счёте правильно отрабатывает, то он должен что-то вывестиТак вот как в JUnit тесте проверить, что метод cook что добавил...