我正在try 将Map<String, Any>
转换为数据类实例:
data class Person(
val name: String,
val age: Int,
val weight: Double?,
)
fun test() {
val map = mapOf(
"name" to "steven",
"age" to 30,
"weight" to 60,
)
val ctor = Person::class.constructors.first();
val params = ctor.parameters.associateWith {
map[it.name]
}
val instance = ctor.callBy(params)
println(instance)
}
上面的代码抛出java.lang.IllegalArgumentException: argument type mismatch
,因为60
作为Int传递给weight
,而Kotlin不支持隐式转换.
然后我将weight
的类型更改为不可为空的Double
data class Person(
val name: String,
val age: Int,
val weight: Double, // !
)
这很管用,即使是60F
也管用.
我的问题是:
-
为什么隐式转换只在类型不可为空时才起作用?
-
当类型可为空时如何进行隐式转换?