Я разрабатывал серверную службу 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
, пустые строки ""
), для полей.
Затем он использует методы открытого установщика для установки полей экземпляра со значениями, найденными в document
.
Как это возможно, учитывая, что поля были помечены как val
в конструкторе первичного класса данных?Здесь играет роль отражение?Разве val
не действительно окончательно в Котлине?