如何使用Kotlin反序列化包含DocumentReference的Firestore DocumentSnapshot

我有以下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

我想我发现如何做到这一点。 所以你所要做的就是使用这个简单的声明: lateinit ,正如文档所说:

通常,声明为具有非null类型的属性必须在构造函数中初始化。 但是,这往往不方便。 例如,属性可以通过依赖注入来初始化,或者在单元测试的设置方法中进行初始化。 在这种情况下,你不能在构造函数中提供一个非null初始值设定项,但是当你引用一个类的内部属性的时候,你还是要避免使用null检查。

我的数据类现在看起来像:

 @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)) } 

注意自我:我真的需要阅读更多关于Kotlin …