var name: String = this::class.java.simpleName
} хочу в данной области видимости получить имя класса в котором находится данный код. как сделать правильно? то есть если в классе Food(), то должно быть name=Food
Во-первых почему var? Во-вторых почему в компаньоне? в третьих, зачем сохранять и вечно хранить это поле, почему не функция? В четвертых, оно может быть null, если правильно помню.
а вот про нулл не думал, может так сложиться ?
Надо посмотреть сигнатуру https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.reflect/-k-class/simple-name.html
потому что val не присвоить значение имени класса. в компаньоне потому что надо будет из list(Map<String,String>) делать list(Objects), где Objects разные классы. то есть буду дергать when(type) { Food.name -> Food()}. Не функция потому что на момент идентификация type инстанта класса не будет существовать. надо сначала опознать, потом создать. 4 - оно не будет null, так как создано будет в реально существующем классе. Вы предлагаете функцию сделать в companion?
А зачем вам строка если вы сверяете типы? Чем KClass не угодил? Ну и все равно вы на чем это имя вызваете?
входные данные - строки. в зависимости от них надо создать определённые объекты. строка Food lдолжна порождать создание инстанса класса Food()
да нет класса в начале, только строка. это задача стоит - создать класс
Все равно не понял, в какой момент вы имя генерируете
Class.forName("MyClass")?.newInstance() не???
пример - есть лист ['Food','Phone'] ПО НЕМУ я должен создать объекты Food() , Phone(). Их надо идентифицировать, поэтому мне нужно имя класса иметь где-то. Так как ИНСТАНСА класса нет на этапе массива строк, то нужен механизм распознования
Вы пытаетесь изобрести Class.forName(...).newInstance(...).
а для классов с параметрами это будет работать?
Будет. Только сразу предупрежу, что это практика, которую сейчас рекомендуют не использовать. Рефлективная генерация объектов назвается
а как бы вы сделали? надо ручками всё, без доп. средств
Ну вот вариант свича по именам не такой уж плохой. Но вообще вопрос в том, зачем вам это нужно. Подозреваю, что вы сериализацию изобретаете
по сути да, но kotlinx.serializ-n юзать нельзя . не помню правильное название
Понятно. Учебная задача?
отчасти, проектировочное задание на стажировку
Ну тогда я бы привел два варианта. С рефлексией и без и объяснил бы в чем плюсы и минусы рефлексии
Обсуждают сегодня