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

Есть ли способ вытянуть из KClass<T> новый экземпляр T не

ковыряясь в конструкторах? что-то вроде .createInstance который вызовет первый конструктор с дефолтными параметрами

14 ответов

24 просмотра

Вроде такого как в джаве методе нет

А в чем проблема конструктор найти с нужной сигнатурой? Заодно и ошибок меньше будет.

samurai- Автор вопроса
Iaroslav Postovalov
А в чем проблема конструктор найти с нужной сигнат...

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

samurai
проблемы-то в принципе нет. только код от этого пр...

По-моему, это и по коду норм, если не сверять конкретные перегрузки по типу: class K { constructor(a: Int) {} } K::class.constructors.first { it.parameters.size == 1 }.call(42)

Iaroslav Postovalov
По-моему, это и по коду норм, если не сверять конк...

Ну добавь проверку, ну. Кто-то ж обязательно это как есть скопипастит.

Iaroslav Postovalov
По-моему, это и по коду норм, если не сверять конк...

Специально для @r4zzz4k. С проверкой типа: class K { constructor(a: Int) {} } K::class.constructors.first { it.parameters.size == 1 && it.parameters[0].type.classifier == Int::class }.call(42)

samurai- Автор вопроса
Iaroslav Postovalov
Специально для @r4zzz4k. С проверкой типа: class K...

а если в конструкторе неизвестное количество параметров с неизвестными(хотя и ограниченными) типами?

samurai
а если в конструкторе неизвестное количество парам...

Тогда нужно исходить из типов объедков, которые вы в него пытаетесь засунуть.

samurai
а если в конструкторе неизвестное количество парам...

Как-то так: class K { constructor(a: Int) {} } val args: List<Any> = listOf(42) K::class.constructors .first { it.parameters.size == args.size && it.parameters.zip(args).all { (param, arg) -> param.type.classifier == arg::class } } .call(*args.toTypedArray())

samurai- Автор вопроса
Iaroslav Postovalov
Тогда нужно исходить из типов объедков, которые вы...

Как раз наоборот. Надо исходить из того, какие параметры в конструкторе. Ибо я на них никак не влияю. Только ограничиваю типы базовыми. Но, я думаю, в моём случае будет удобнее требовать конструктор с дефолтными параметрами. Но за наводки спасибо

samurai
Как раз наоборот. Надо исходить из того, какие пар...

Так может, если вы можете что-то требовать, лучше требовать не пустые конструкторы, а фабричные функции?

samurai- Автор вопроса

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта