调用Kotlin中带有默认参数的反射构造函数



我正在从json文件中恢复复杂的数据,其中一些需要调用没有空构造函数的特定类型,而是带有默认参数的构造函数。

有一个创建空对象的方法,

abstract class Restorer {
inline fun <reified T>load(ctx: T): T {
var that: T = reset(ctx)
// ...
}
inline fun <reified T>reset(ctx: T): T {
val primaryConstructorT = T::class.constructors.find {
it.parameters.isEmpty() || it.parameters.all { prm ->  prm.isOptional }
}
return primaryConstructorT!!.call() // <--- here is a problem
}
}

所以在某些情况下,primaryConstructorT是具有可选参数的构造函数的反射,但是直接调用它会产生异常。Callable expects 2 arguments, but 0 were provided.

有创建简单数据类

的情况
data class DataClass (val foo: List<String> = listOf(), val bar: List<Int> = listOf())
// ...
var context: DataClass? = null;
// ...
context = Restorer.load(context)

有没有方法可以调用它

也许有更好的方法,但是您可以使用带空映射的callBy():

return primaryConstructorT!!.callBy(emptyMap())

它会自动用默认参数替换缺失的参数。

相关内容

  • 没有找到相关文章

最新更新