Size: a a a

Kotlin Community

2020 August 30

IO

Iaroslav Orlov in Kotlin Community
но это достаточно кривая фича, которую нормально не сделать никак
источник

AN

Alexander Nozik in Kotlin Community
Iaroslav Orlov
были бы variadic generics - в теории можно было бы такую штуку накостылить
Нет, нельзя. Все эти прекрасные навароты с гетерогенными списками работают только в статике, а тут наверняка хэндлеры динамически подгружаются
источник

IO

Iaroslav Orlov in Kotlin Community
а, да
источник

IO

Iaroslav Orlov in Kotlin Community
ну тогда только KClass хранить
источник

IO

Iaroslav Orlov in Kotlin Community
или молиться на лабу, где делают class reified generics
источник

AN

Alexander Nozik in Kotlin Community
Ну это самый простой способ. Еще можно хранить фабрики.
источник

VN

Vladislav Navrocky in Kotlin Community
Alexander Nozik
Нет, нельзя. Все эти прекрасные навароты с гетерогенными списками работают только в статике, а тут наверняка хэндлеры динамически подгружаются
Да, хэндлеры на разные типы Item в одном сервисе грубо говоря. Но сервису все равно что за тип, лишь бы соответствовал Item
источник

VN

Vladislav Navrocky in Kotlin Community
В общем без unchecked cast тут не обойтись?
источник

AN

Alexander Nozik in Kotlin Community
Vladislav Navrocky
Да, хэндлеры на разные типы Item в одном сервисе грубо говоря. Но сервису все равно что за тип, лишь бы соответствовал Item
private val map = HashMap<KClass<out Item>, Handler<*>>()

public inline fun <reified T: Item> registerHandler(handler: Handler<T>){
 map[T::class] = handler
}

public inline fun <reified T: Item> getHandler() = map[T::class] as Handler<T>
источник

AN

Alexander Nozik in Kotlin Community
Vladislav Navrocky
В общем без unchecked cast тут не обойтись?
да. Но ничего страшного в нем нет если у вас внутренности инкапсулированы.
источник

AN

Alexander Nozik in Kotlin Community
Вообще наверное можно в стдлибу добавить один раз эту структуру, чтобы все любители гетерогенных списков раз и навсегда отвалились.
источник

NR

Nikita Rudy in Kotlin Community
Ребят, подскажите пожалуйста, есть два модуля, не связаны, но оба добавлены в проект идеи, модули как библиотека и собственно то что ее использует, один наследует другой через Gradle
Когда из второго модуля кликаю резолв по какому-то классу через контрл, то открывается декомпилированный .class, а не исходники
В идее есть штука вида Choose sources, но она весьма неудобная когда модулей много, и постоянно слетает
Может есть какой-то способ упростить боль? Скажем как-то зафорсить Choose Sources по умолчанию на те модули что в проекте?
источник

AN

Alexander Nozik in Kotlin Community
Nikita Rudy
Ребят, подскажите пожалуйста, есть два модуля, не связаны, но оба добавлены в проект идеи, модули как библиотека и собственно то что ее использует, один наследует другой через Gradle
Когда из второго модуля кликаю резолв по какому-то классу через контрл, то открывается декомпилированный .class, а не исходники
В идее есть штука вида Choose sources, но она весьма неудобная когда модулей много, и постоянно слетает
Может есть какой-то способ упростить боль? Скажем как-то зафорсить Choose Sources по умолчанию на те модули что в проекте?
Есть конкретно в мультплатформе такой баг. Весьма неприятный, причем я не понимаю, когда-то оно срабатывает, когда-то нет
источник

VP

Vladimir Petrakovich in Kotlin Community
Да не в мультиплатформе с либами такое бывает периодически
источник

VP

Vladimir Petrakovich in Kotlin Community
Nikita Rudy
Ребят, подскажите пожалуйста, есть два модуля, не связаны, но оба добавлены в проект идеи, модули как библиотека и собственно то что ее использует, один наследует другой через Gradle
Когда из второго модуля кликаю резолв по какому-то классу через контрл, то открывается декомпилированный .class, а не исходники
В идее есть штука вида Choose sources, но она весьма неудобная когда модулей много, и постоянно слетает
Может есть какой-то способ упростить боль? Скажем как-то зафорсить Choose Sources по умолчанию на те модули что в проекте?
Так а как у вас сделана зависимость одного модуля от другого?
источник

NR

Nikita Rudy in Kotlin Community
Просто в build.gradle строка implementation
источник

NR

Nikita Rudy in Kotlin Community
group name version
источник

VP

Vladimir Petrakovich in Kotlin Community
Nikita Rudy
group name version
Так, значит вы этот модуль в локальный репозиторий закидываете?
источник

NR

Nikita Rudy in Kotlin Community
Да
источник

VP

Vladimir Petrakovich in Kotlin Community
А исходники тоже?
источник