我有以下数据类
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
,Kotlin文档说:
但是即使使用了当我们调用可变参数函数时,我们可以逐个传递参数,例如asList(1, 2, 3),或者如果我们已经有一个数组并想将其内容传递给函数,则使用扩展操作符(在数组前加上*)
*
,我仍然收到以下异常:java.lang.IllegalArgumentException: Wrong number of arguments; expected 3, got 1
有人能给我一些如何实例化我的类的建议吗?谢谢
createEntity
函数? - Michael