lazt omen
05/19/2022, 1:22 AMdata class Business(
val id: Int,
val name: String
)
val columns = listOf("id", "name")
val values = listOf(1, "Hello")
Is it possible to instantiate this class mapping dynamically my columns to contructor parameters?ephemient
05/19/2022, 4:58 AMval cons = Business::class.primaryConstructor!!
val params = columns.map { name ->
cons.parameters.single { it.name == name }
}
val business = cons.callBy(params.zip(values).toMap())
this does not check for multiple constructors, missing parameters, mismatched types, but may be enough to get you startedlazt omen
05/19/2022, 7:32 AMDALDEI
05/30/2022, 8:01 PMephemient
05/30/2022, 8:16 PMBusiness(mapOf())
doesn't fail at construction time, but at some later point in time when the properties are accessed, and loses other features of data classes like copyephemient
05/30/2022, 8:22 PMdata class Business(val id: Int, val name: String)
fun Business(data: Map<String, Any>): Business? {
return Business(
data["id"] as? Int ?: return null,
data["name"] as? String ?: return null,
)
}
if you want that interface without reflection