Один из вариантов - заменить вспомогательный конструктор методом invoke()
для сопутствующего объекта:
class MyObject(var string1: String, var string2: String, var string3: String) {
companion object {
operator fun invoke(presetCode: PresetCode) = when (presetCode) {
PresetCode.Code1 -> MyObject("aaa", "bbb", "ccc")
else -> MyObject("", "", "")
}
}
var anotherObject = AnotherObject(string1)
}
При использовании это выглядит так же, как вызов конструктора, например ::
val o = MyObject(PresetCode.Code1)
Этот подход прост, лаконичен и очень гибок. (Например, он может вернуть кэшированный экземпляр вместо создания нового.)