我一直在开发 Kotlin 后端服务,偶然发现了 FirestoredocumentSnapshot.toObject(className::class.java)
方法。
采取以下 Kotlin data class
:
data class Record(
val firstName: String = "",
val lastName: String = "",
val city: String = "",
val country: String = "",
val email: String = "")
以及我Repository
班上的以下代码:
if (documentSnapshot.exists()) {
return documentSnapshot.toObject(Record::class.java)!!
}
现在,据我了解,该方法documentSnapshot.toObject(className::class.java)
需要并调用无参数默认构造函数,例如val record = Record()
.
此调用将调用主构造函数并将其中规定的默认值(在数据类的情况下为Record
空字符串""
)分配给字段。
然后,它使用公共 setter 方法将实例的字段设置为在document
.
鉴于这些字段已被标记为val
主要数据类构造函数中,这怎么可能?反射在这里起作用吗?在 Kotlin 中val
不是真正的 final吗?