为什么我不能直接使用哈希图,为什么要投射它



我正试图从Firebase中检索数据,所以我使用了Hashmap,但我想知道为什么要铸造Hashmap,为什么不能直接使用它。请给出一个深刻而简单的语言答案(应该在Kotlin(

这是代码:

var map = snapshot.getValue() as Hashmap<String,String>

当对包含多个值的DataSnapshot调用时,getValue()会返回一个Map<String,Object>,因为(虽然键是定义字符串(它不知道数据库中所有值的类型。

如果知道所有值都是字符串,那么可以像这样将结果强制转换为Map<String,String>,但它确实需要强制转换从getValue()返回的结果。

DataSnapshot#getValue((方法返回object:类型的对象

getValue((将此快照中包含的数据作为本机类型返回。返回的可能类型为:

  • 布尔
  • 字符串
  • Long
  • Double
  • 映射<字符串,对象>
  • 列表

由于Firebase实时数据库中的每个节点都可以由成对的键和值表示,实际上是"映射",因此必须使用该转换才能真正读取数据。

或者,可以使用DataSnapshot#getValue(Class-valueType(将每个节点映射到特定类的对象中。

编辑:

我研究过getValue((只是一个对象,所以你能告诉我它是哪个类的对象吗?

getValue((返回object类型的对象。Object类是所有类从中继承的类。

还有一件事,如果我们知道某个类的对象可以返回String、Boolean、Map等,那么每次我们都需要强制转换它的返回类型。

是的,您必须转换为相应的值。

就像在我的情况下,我想使用一个地图,所以我把它转换成hashmap,好吗。。。但如果我想从getValue((获得字符串值,那么我需要将其强制转换为string,对吗?。

是的,这确实是你必须做的。或者你可以使用替代解决方案。

最新更新