用数据库中的不同对象填充数组

Posted

技术标签:

【中文标题】用数据库中的不同对象填充数组【英文标题】:fill array with different objects from database 【发布时间】:2020-09-06 11:06:49 【问题描述】:

我有一个数组并尝试用我的数据库中的对象填充这个数组。到目前为止,这种方式是有效的

var array: ArrayList<MyObject>()

val itemsToFillArray: List<MyObject> = documentSnapshots.toObjects(MyObject::class.java)
array.addAll(itemsToFillArray)

但我现在的问题是,我的数据库中有多个对象,而不仅仅是MyObject。我已经给我的对象一个接口并以这种方式尝试过,但它不起作用。 如何从我的数据库中检索不同的对象并将它们存储在我的数组中?

【问题讨论】:

有一个类似的线程解决了这个问题,它也与 firestore 和 kotlin 一起使用 ArrayList ***.com/questions/54647028/… documentSnapshots的类型是什么?你如何检索数据?有没有考虑过使用 JPA,它会为您转换对象?这个问题的未知变量太多 【参考方案1】:

我已经给我的对象一个接口。

假设您使用接口MyInterface

interface MyInterface  /* ... */ 

在这种情况下MyObject类和其他你想使用的类应该实现这个接口:

class MyObject : MyInterface  /* ... */ 

class MyOtherObject : MyInterface  /* ... */ 

如果你操作正确,那么你应该能够在数组中存储不同的对象:

val array: ArrayList<MyInterface> = arrayListOf()

val itemsToFillArray1: List<MyObject> = documentSnapshots1.toObjects(MyObject::class.java)
val itemsToFillArray2: List<MyOtherObject> = documentSnapshots2.toObjects(MyOtherObject::class.java)
array.addAll(itemsToFillArray1)
array.addAll(itemsToFillArray2)

【讨论】:

【参考方案2】:

您可以声明为Any,而不是声明特定对象MyObject

var array: ArrayList<Any>() = null

但在添加项目时,您需要添加检查允许的对象,这样任何未知对象都不会被分配给数组。

if(documentSnapshots.documents is MyObject || 
      documentSnapshots.documents is MyObjectTwo)
     array.add(documentSnapshots.documents)

【讨论】:

好的,谢谢,但是我如何将数据库中的对象填充到我的数组中?喜欢这个val items: List&lt;Any&gt; = documentSnapshots.documents 这不是一个答案,未经检查的铸造是不安全的。并且填充未知值并不是最好的主意。 那么@AnimeshSahu 你有什么推荐的? @DurgaM 在 kotlin 中没有 instanceof,有 is 关键字。而且我不明白您要在答案中显示什么,您正在覆盖变量。

以上是关于用数据库中的不同对象填充数组的主要内容,如果未能解决你的问题,请参考以下文章

需要来自 txt 文件的数据,以逗号分隔,以使用现有类中的对象填充数组列表

用核心数据属性填充数组

用来自 php 的数据填充 flash 中的数组

在托管代码中填充非托管数组

为啥直接用数组填充范围并按索引进行索引时会获得2个不同的结果?

表未从对象数组中正确填充