用Kotlin反射调用类的构造函数

我有以下的数据类

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

我需要通过反射来调用它的构造函数。 我试了下面的代码

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

并用args参数的一个数组来调用它。

 val fields = entity.declaredFields 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) 

使用entity: Class<T>cursor: Cursor来自本地数据库的cursor: Cursor Kotlin Documentation说:

当我们调用可变参数函数的时候,我们可以逐个传递参数,比如asList(1,2,3),或者如果我们已经有一个数组并且想把它的内容传给函数,我们使用spread运算符(在数组前加*)

但即使与*我不断收到以下异常:

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

任何人都可以给我一些关于如何实例化我的课程的提示? 谢谢

调用newInstance()方法时必须使用spread运算符。 createEntity()的签名是错误的。 我会建议像这样定义它。

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