【发布时间】:2019-05-12 11:24:14
【问题描述】:
我一直在开发 Kotlin 后端服务,偶然发现了 Firestore documentSnapshot.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,这怎么可能?
反射在这里起作用吗?
val 不是真正在 Kotlin 中的最终版本吗?
【问题讨论】:
标签: firebase kotlin google-cloud-firestore data-class