Ich habe eine Karte in Scala von einer Funktion zurück die vom Typ ist Map[String, Any]
Alle Datentyp Griff dynamisch in Scala
Zum Beispiel:
val map: Map[String, Any] = Map("key1" -> "strVal", "key2" -> List[Map[String, Any]](), "key3" -> Map("k1" -> "v1"))
Nun das Problem ist, auf dem Wert I zu arbeiten, Entspricht einem Schlüssel, muss ich jedes Mal asInstanceOf[]
verwenden. Für zB
val key2Hash = map.getOrElse("key3", Map()).getOrElse("k1", "")
wirft Fehler, weil die abgerufene Karte von Form ist Any
und ich habe asInstanceOf[]
für jede Situation als belows verwenden:
val key2Hash = map.getOrElse("key3", Map()).asInstanceOf[Map[String, String]].getOrElse("k1", "")
Gibt es einen besseren Weg, es zu tun? Oder sollte ich nicht mit Map[String, Any]
an erster Stelle beginnen?
Wenn es nur zwei Datentypen sind Sie entweder [A, B] verwenden könnten Ihre Daten darzustellen. –
Es ist am besten, 'Any' zu vermeiden, wenn Sie können. Wenn dies nicht möglich ist, können Sie einen Mustervergleich durchführen. Es ist 'IsInstanceOf' +' asInstanceOf' hinter den Kulissen, aber es ist mehr idiomatisch. – slouc