из Java не видно наследование в файле в Kotlin

186
06 февраля 2020, 06:40

Есть такой метод который сидит в 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>>

Так вот теперь вопрос. Как с этим жить?))

READ ALSO
Связь методов System.arraycopy() и Arrays.binarySearch()

Связь методов System.arraycopy() и Arrays.binarySearch()

На фото ниже - наглядная схема метода Systemarraycopy()

214
Абстракция и моё понимание

Абстракция и моё понимание

Абстра́кция в объектно-ориентированном программировании — это использование только тех характеристик объекта, которые с достаточной...

207
Как создать класс?

Как создать класс?

У меня бизнес логика перемешена с UIКак отделить бизнес логику в отдельный класс, экземпляр которого может генерировать значения больше и меньше...

195
Как проверить метод?

Как проверить метод?

Если метод сook в конечном счёте правильно отрабатывает, то он должен что-то вывестиТак вот как в JUnit тесте проверить, что метод cook что добавил...

226