Llamar al constructor de la class por reflexión con Kotlin

Tengo la siguiente class de datos

data class Person (val id: Int? = null, val name: String, val active: Boolean) 

Necesito llamarlo constructor por reflexión. Probé el siguiente código

 private fun <T> createEntity(constructor: Constructor<*>, vararg args: T) : Any { return constructor.newInstance(args) } 

y llámalo con una matriz para el parámetro args .

 val fields = entity.declanetworkingFields var elements = Array<Any>(getFieldsCount(fields), { i -> val index = cursor.getColumnIndex(fields[i].name.toUpperCase()) when (fields[i].type) { kotlin.Int::class.java -> cursor.getInt(index) kotlin.Boolean::class.java -> if (cursor.getInt(index) == 1) true else false else -> cursor.getString(index) } }) val test = createEntity(entity.constructors.first(), *elements) 

Con entity: Class<T> y cursor: Cursor de una database local La Documentación de Kotlin dice:

Cuando llamamos a una function vararg, podemos pasar arguments uno por uno, por ejemplo, como Lista (1, 2, 3), o, si ya tenemos una matriz y queremos pasar su contenido a la function, usamos la extensión operador (prefija la matriz con *)

pero incluso con * sigo recibiendo la siguiente exception:

 java.lang.IllegalArgumentException: Wrong number of arguments; expected 3, got 1 

¿Alguien puede darme algunos consejos sobre cómo crear una instancia de mi class? Gracias

newInstance() usar el operador de extensión al invocar el método newInstance() . Y la firma de createEntity() es incorrecta. Yo recomendaría definirlo así.

 private fun <T> createEntity(constructor: Constructor<T>, vararg args: Any) : T { return constructor.newInstance(*args) }