用数据库中的不同对象填充数组
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<Any> = documentSnapshots.documents
?
这不是一个答案,未经检查的铸造是不安全的。并且填充未知值并不是最好的主意。
那么@AnimeshSahu 你有什么推荐的?
@DurgaM 在 kotlin 中没有 instanceof
,有 is
关键字。而且我不明白您要在答案中显示什么,您正在覆盖变量。以上是关于用数据库中的不同对象填充数组的主要内容,如果未能解决你的问题,请参考以下文章
需要来自 txt 文件的数据,以逗号分隔,以使用现有类中的对象填充数组列表