java反射调用构造函数_java – 通过Kotlin反射调用类’构造函数

博客讨论了在Kotlin中使用反射来实例化一个数据类`dataclass Person`的问题。作者遇到的问题是在尝试通过反射调用构造函数时,传入参数数组导致的`IllegalArgumentException`,错误信息指出预期参数数量为3,但实际接收到1个参数。代码示例显示了创建实体的函数以及从数据库游标获取字段值的过程。作者寻求解决方案来正确地实例化数据类。
摘要由CSDN通过智能技术生成

我有以下数据类

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

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

private fun createEntity(constructor: Constructor, vararg args: T) : Any {

return constructor.newInstance(args)

}

并使用args参数的数组调用它.

val fields = entity.declaredFields

var elements = Array(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)

使用实体:Class< T>和cursor:来自本地数据库的游标

Kotlin文档说:

When we call a vararg-function, we can pass arguments one-by-one, e.g. asList(1, 2, 3), or, if we already have an array and want to pass its contents to the function, we use the spread operator (prefix the array with *)

但即使有*我仍然得到以下异常:

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

谁能给我一些关于如何实例化我的课程的技巧?谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值