ковыряясь в конструкторах? что-то вроде .createInstance который вызовет первый конструктор с дефолтными параметрами
Вроде такого как в джаве методе нет
А в чем проблема конструктор найти с нужной сигнатурой? Заодно и ошибок меньше будет.
проблемы-то в принципе нет. только код от этого приятнее не станет. перед погружением хотел убедиться, что проще методов нет
По-моему, это и по коду норм, если не сверять конкретные перегрузки по типу: class K { constructor(a: Int) {} } K::class.constructors.first { it.parameters.size == 1 }.call(42)
Ну добавь проверку, ну. Кто-то ж обязательно это как есть скопипастит.
Пусть учится на ошибках)
Специально для @r4zzz4k. С проверкой типа: class K { constructor(a: Int) {} } K::class.constructors.first { it.parameters.size == 1 && it.parameters[0].type.classifier == Int::class }.call(42)
а если в конструкторе неизвестное количество параметров с неизвестными(хотя и ограниченными) типами?
Тогда нужно исходить из типов объедков, которые вы в него пытаетесь засунуть.
Как-то так: 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())
Как раз наоборот. Надо исходить из того, какие параметры в конструкторе. Ибо я на них никак не влияю. Только ограничиваю типы базовыми. Но, я думаю, в моём случае будет удобнее требовать конструктор с дефолтными параметрами. Но за наводки спасибо
Так может, если вы можете что-то требовать, лучше требовать не пустые конструкторы, а фабричные функции?
думаю это необоснованно усложнит структуру. параметры по умолчанию всё таки более удобны. тем более речь о data классах, которые по идее не должны за собой лишнего тянуть. впрочем я ещё посмотрю, как похожая ситуация в подобном проекте разрешена
На ваше усмотрение.
Обсуждают сегодня