169 похожих чатов

Companion object {

var name: String = this::class.java.simpleName
} хочу в данной области видимости получить имя класса в котором находится данный код. как сделать правильно? то есть если в классе Food(), то должно быть name=Food

20 ответов

8 просмотров

Во-первых почему var? Во-вторых почему в компаньоне? в третьих, зачем сохранять и вечно хранить это поле, почему не функция? В четвертых, оно может быть null, если правильно помню.

Alexander Nozik
Во-первых почему var? Во-вторых почему в компаньон...

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

Nikolas Komaro
а вот про нулл не думал, может так сложиться ?

Надо посмотреть сигнатуру https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.reflect/-k-class/simple-name.html

Anatoliy-Kernokus Автор вопроса
Alexander Nozik
Во-первых почему var? Во-вторых почему в компаньон...

потому что val не присвоить значение имени класса. в компаньоне потому что надо будет из list(Map<String,String>) делать list(Objects), где Objects разные классы. то есть буду дергать when(type) { Food.name -> Food()}. Не функция потому что на момент идентификация type инстанта класса не будет существовать. надо сначала опознать, потом создать. 4 - оно не будет null, так как создано будет в реально существующем классе. Вы предлагаете функцию сделать в companion?

Anatoliy Kernokus
потому что val не присвоить значение имени класса....

А зачем вам строка если вы сверяете типы? Чем KClass не угодил? Ну и все равно вы на чем это имя вызваете?

Anatoliy-Kernokus Автор вопроса
Alexander Nozik
А зачем вам строка если вы сверяете типы? Чем KCla...

входные данные - строки. в зависимости от них надо создать определённые объекты. строка Food lдолжна порождать создание инстанса класса Food()

Anatoliy-Kernokus Автор вопроса
Alexander Nozik
А зачем вам строка если вы сверяете типы? Чем KCla...

да нет класса в начале, только строка. это задача стоит - создать класс

Anatoliy Kernokus
да нет класса в начале, только строка. это задача ...

Все равно не понял, в какой момент вы имя генерируете

Anatoliy-Kernokus Автор вопроса
Alexander Nozik
Все равно не понял, в какой момент вы имя генериру...

пример - есть лист ['Food','Phone'] ПО НЕМУ я должен создать объекты Food() , Phone(). Их надо идентифицировать, поэтому мне нужно имя класса иметь где-то. Так как ИНСТАНСА класса нет на этапе массива строк, то нужен механизм распознования

Anatoliy Kernokus
пример - есть лист ['Food','Phone'] ПО НЕМУ я дол...

Вы пытаетесь изобрести Class.forName(...).newInstance(...).

Anatoliy-Kernokus Автор вопроса
Alexander Nozik
Вы пытаетесь изобрести Class.forName(...).newInsta...

а для классов с параметрами это будет работать?

Anatoliy Kernokus
а для классов с параметрами это будет работать?

Будет. Только сразу предупрежу, что это практика, которую сейчас рекомендуют не использовать. Рефлективная генерация объектов назвается

Anatoliy-Kernokus Автор вопроса
Alexander Nozik
Будет. Только сразу предупрежу, что это практика, ...

а как бы вы сделали? надо ручками всё, без доп. средств

Anatoliy Kernokus
а как бы вы сделали? надо ручками всё, без доп. ср...

Ну вот вариант свича по именам не такой уж плохой. Но вообще вопрос в том, зачем вам это нужно. Подозреваю, что вы сериализацию изобретаете

Anatoliy-Kernokus Автор вопроса
Alexander Nozik
Ну вот вариант свича по именам не такой уж плохой....

по сути да, но kotlinx.serializ-n юзать нельзя . не помню правильное название

Anatoliy-Kernokus Автор вопроса
Alexander Nozik
Понятно. Учебная задача?

отчасти, проектировочное задание на стажировку

Anatoliy Kernokus
отчасти, проектировочное задание на стажировку

Ну тогда я бы привел два варианта. С рефлексией и без и объяснил бы в чем плюсы и минусы рефлексии

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта