我正在从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())
它会自动用默认参数替换缺失的参数。