Ah… Maybe you could use delegation? https://kotlinlang.org/docs/reference/delegated-properties.html see the example of delegating fields to a map. That might let you skip the init block. That would let you expose your known fields in a consistent manner across different objects.