FYI I achieve this using a combination of kotlin-jackson module, the "--no-args' compiler extension, and a wild Imagination. Full code is too complex and case dependant, the concept is that Jackson (json parser/data mapper) can function as a pure type conversion (no 'json')) and with the no-args compiler extention (and a custom Annoation ) Jackson can contruct data classes with no defult values -- long eough to provide them in other means. For exmple you canprovide Map<String,Any> with the parameters (or with the right options set, MORE then 3enough -- aka thounds of entries if you want to say just read from a system wide config file) provide that as the 'source object,. and the desired class as the target (by generic parameter or by concrete class object) and call one of the methods that does tyhpe conversion such as DataMapper.convertValue( map , targetClass) --> voila -- jackson figures out how to find the construtors, and baring that uses the no-arg case and creates a temporarily 'invalid' object then proceeds to fill in the required members from the source until done returning a new full populated instance of the desired class.