Size: a a a

2021 June 09

Y

Yanis in Kotlin Start
я понимаю как оно под капотом, но вдруг котлин научился в что-то подобное
https://github.com/livefront/sealed-enum
источник

AA

Andrey Antipov in Kotlin Start
Ну вы можете пойти через when(parent), а в ветках перебрать все подклассы и реализовать парсинг под каждый случай
источник

Y

Yanis in Kotlin Start
можно но не получится, наследники в другом модуле
источник

AA

Andrey Antipov in Kotlin Start
Это как??? У sealed class по определению фиксированный набор наследников, при этом они все в одном пакете и одном compilation unit
источник

Y

Yanis in Kotlin Start
там небольшой хак с наследованием от sealed class
источник

AA

Andrey Antipov in Kotlin Start
Ааа, ну то есть сами поломали гарантии, а теперь расхлебываете. Тогда никак, и рефлексия тоже не факт, что найдёт всех наследников корректно.
источник

Y

Yanis in Kotlin Start
велосипед не мой, пока буду через рефлексию делать
источник

AA

Andrey Antipov in Kotlin Start
А кто придумал такой добрый велосипед без седла?
источник

Y

Yanis in Kotlin Start
вам нужны имена и явки?)
источник

AA

Andrey Antipov in Kotlin Start
Желательно. Это red flag при приёме на работу
источник

Y

Yanis in Kotlin Start
коллега)
источник

AA

Andrey Antipov in Kotlin Start
Ну вам просто надо убрать этот хак, а не вертеть костыли поверх сломанного кода
источник

Y

Yanis in Kotlin Start
да, потом переделаю
источник

AA

Andrey Antipov in Kotlin Start
Как минимум - заменить sealed на abstract, чтобы не смущать тех, кто это читает, ложными обещаниями
источник

AA

Andrey Antipov in Kotlin Start
А можете скинуть, как там это хакнуто? Что-то мне с ходу на ум не приходит, как такого наследника объявить.
источник

Y

Yanis in Kotlin Start
sealed class Source(rawValue: String)

sealed class Source2(rawValue: String) : Source(rawValue) {
 object Test: Source2("test")
}
источник

AA

Andrey Antipov in Kotlin Start
А, ну тут всё ок. Насчёт Parcelable для sealed - https://stackoverflow.com/questions/57810072/making-sealed-class-hierarchy-parcelable
А перебор разных вариантов в when для подобного вашему случая выглядит так примерно:
sealed class Source(val raw: String)

class Test(raw: String): Source(raw)

sealed class Source2(raw: String, val raw2: String): Source(raw) {
   class Test(raw: String, raw2: String): Source2(raw, raw2)
}

fun main() {
   val parent: Source = Source2.Test("raw", "raw2")
   val serialized = when (parent) {
       is Test -> "Test(raw = ${parent.raw})"
       is Source2.Test -> "Source2.Test(raw = ${parent.raw}, raw2 = ${parent.raw2})"
   }
}
источник

Y

Yanis in Kotlin Start
спасибо за ответ
проблема в том что тот кто перебирает ничего не знает о Source2 :)
источник

Y

Yanis in Kotlin Start
он на одном уровне с Source
источник

IY

Ilya Yarets in Kotlin Start
Товарищи подскажите пожалуйста, есть список объектов, где есть стринговое поле, как просортировать список так, что одно из значений в этом стриговом поле должно переместиться в низ списка.

заранее спасибо
источник