Как десериализовать Firestore DocumentSnapshot, содержащий DocumentReference, используя Kotlin

У меня есть следующая структура Firestore:

Firestore: коллекция пользователей

Мне удается десериализовать его с помощью Kotlin, но только используя Any как тип для города и деятельности. Пока это мой класс данных:

 @IgnoreExtraProperties data class User ( var firstName: String, var lastName: String, var displayName: String, var birthday: Date, var memberSince: Date, var city: Any, var activities: ArrayList<Any> ) { constructor():this("", "", "", Date(), Date(), Any(), ArrayList(0)) } 

И вот как я извлекаю данные и десериализую:

 DocumentReference userRef = mFirestoreDB.collection("user").document(mFirebaseUser.getUid()); userRef.addSnapshotListener(this, new EventListener<DocumentSnapshot>() { @Override public void onEvent(DocumentSnapshot documentSnapshot, FirebaseFirestoreException e) { if (documentSnapshot.exists()) { final User user = documentSnapshot.toObject(User.class); Log.i(TAG, user.toString()); } else if(e != null) { Log.e(TAG, "Error retrieving user data from Firestore", e); } } }); 

Мне было интересно, есть ли способ, которым я могу категоризировать город и деятельность как DocumentReference так, как должен?

    Думаю, я нашел, как это сделать. Таким образом, все, что вам нужно сделать, это использовать это awsome объявление: lateinit, который, как говорится в документе:

    Обычно свойства, объявленные как имеющие ненулевой тип, должны быть инициализированы в конструкторе. Однако довольно часто это не удобно. Например, свойства могут быть инициализированы путем инъекции зависимостей или в методе установки единичного теста. В этом случае вы не можете предоставить инициализатор ненуля в конструкторе, но вы все же хотите избежать нулевых проверок при ссылке на свойство внутри тела класса.

    Теперь класс данных выглядит следующим образом:

     @IgnoreExtraProperties data class User2 ( var firstName: String, var lastName: String, var displayName: String, var birthday: Date, var memberSince: Date, var activities: ArrayList<DocumentReference> ) { lateinit var city: DocumentReference constructor():this("", "", "", Date(), Date(), ArrayList(0)) } 

    Заметьте себе: мне действительно нужно больше узнать о Котлине …