Size: a a a

Kotlin Community

2020 March 28

AL

Anton Lakotka in Kotlin Community
Артём
Коллеги, доброе время суток! Можете помочь с решением одной проблемки, над которой уже вторые сутки не сплю..? =)
Есть интерфейс Block, и интерфейс Item
некоторые адаптер делегаты используют для отрисовки списков Block, некоторые Item
есть класс Loading: Block, Item
Задача: написать функцию/класс, которая могла бы создавать адаптер делегат с Loading либо для Block, либо для Item

Начальная точка размышлений была поставлена с этого метода:
fun <TYPE> loadingShowBlockDelegate(): AdapterDelegate<List<TYPE>>
       where TYPE : Block, TYPE : Item {
   return adapterDelegateLayoutContainer<Loading, TYPE>(
       layout = R.layout.item_loading_list_show
   ) {
   }
}

Но я получаю ошибку "Type argument is not within its bounds. Expected: TYPE, Found: Loading"
Я чувствую, что упускаю что-то важное.. Но никак не понять, что.
возможно, надо пойти через класс, а не через функцию. что то типо someClass<Block>.adapter(). Но в этом направлении у меня пока тоже ничего не получилось.
Я далеко не андроидщик, но
есть подозрение что сам подход не совсем верный.

можете подробнее описать что требуется к чему адаптировать?
источник

А

Артём in Kotlin Community
Anton Lakotka
Я далеко не андроидщик, но
есть подозрение что сам подход не совсем верный.

можете подробнее описать что требуется к чему адаптировать?
в чем заключается неверность? суть простая.. есть список в виде грида с разными айтемами, есть обычный список.. необходимо реализовать пагинацию в виде лоадера и там и там
источник

А

Артём in Kotlin Community
вообщем, задачу получилось решить, но пришлось сделать Block наследуемым от Item
источник

А

Артём in Kotlin Community
всема спасибо за внимание =)
источник

AL

Anton Lakotka in Kotlin Community
Артём
в чем заключается неверность? суть простая.. есть список в виде грида с разными айтемами, есть обычный список.. необходимо реализовать пагинацию в виде лоадера и там и там
не думаю, что наследование -- это хорошая идея.

плюс я еще раз повоторюсь что я не андроидщик. мне сложн о понять где связь между лоадром и пагинацией. ибо в моей картине мира лоадер -- это некий сайдэффект для запроса за данными.
источник

KD

Konstantin Dovnar in Kotlin Community
А что за M релиз?
Оно до или после Release Candidate?

https://blog.jetbrains.com/kotlin/2020/03/kotlin-1-4-m1-released/
источник

AO

Alexey Otts in Kotlin Community
Milestone
источник

D

Denys in Kotlin Community
источник

QH

Quantum Harmonizer in Kotlin Community
Как я понимаю, это на уровне EAP. До беты, задолго до RC.
источник

CL

Constantine Linnick in Kotlin Community
вопрос про дженерики почему нельзя сделать так:

open class Entertainment
open class Entertainer1<T: Entertainment> {
   open fun <T> produce(): T = Entertainment()
}

С типами ведь всё хорошо

Так тоже нельзя

open class Entertainer1<T: Entertainment> {
   open fun produce(): T? = Entertainment()
}
источник

AL

Anton Lakotka in Kotlin Community
Constantine Linnick
вопрос про дженерики почему нельзя сделать так:

open class Entertainment
open class Entertainer1<T: Entertainment> {
   open fun <T> produce(): T = Entertainment()
}

С типами ведь всё хорошо

Так тоже нельзя

open class Entertainer1<T: Entertainment> {
   open fun produce(): T? = Entertainment()
}
out нужен
источник

CL

Constantine Linnick in Kotlin Community
out пробовал не помогает, либо не туда ставлю

open class Entertainer1<out T: Entertainment> {
   open fun produce(): T = Entertainment()
}
источник

QH

Quantum Harmonizer in Kotlin Community
Constantine Linnick
вопрос про дженерики почему нельзя сделать так:

open class Entertainment
open class Entertainer1<T: Entertainment> {
   open fun <T> produce(): T = Entertainment()
}

С типами ведь всё хорошо

Так тоже нельзя

open class Entertainer1<T: Entertainment> {
   open fun produce(): T? = Entertainment()
}
В обоих случаях с типами всё плохо.
В первом у функции есть собственный типовой параметр, про который функция ничего не знает. Ты её produce<SomeEntertainment>(), а она тебе какой-то Entertainment.
Во втором можно унаследовать класс, передав произвольный T: class E : Entertainer1<SomeEnterrainment>(), а метод не переопределить, и тогда см. пункт «во-первых».
источник

D

Denys in Kotlin Community
В @kotlin_start могут помочь с новичковыми вопросами, если что-то в Котлине не получается.
источник

VY

Viktar Yushkevich in Kotlin Community
Keep calm, я не знал.
источник

AN

Alexander Nozik in Kotlin Community
Viktar Yushkevich
Keep calm, я не знал.
А зачем два раза подряд одно и то же писать, если уже ответили
источник

AN

Alexander Nozik in Kotlin Community
Viktar Yushkevich
Keep calm, я не знал.
В @kotlin_start можно задавать вопросы начального уровня. Есть шанс, что ответят. Но я очень сомневаюсь, что кто-то будет лично писать
источник

VY

Viktar Yushkevich in Kotlin Community
Alexander Nozik
А зачем два раза подряд одно и то же писать, если уже ответили
это баг, не я(
источник

AN

Alexander Nozik in Kotlin Community
Viktar Yushkevich
это баг, не я(
А, если баг, то ладно
источник

VY

Viktar Yushkevich in Kotlin Community
Alexander Nozik
А, если баг, то ладно
ага-ага.. каюсь)
источник