Cast Java-Objekt in Java Map<String,Object>

Ich bin mit org.eclipse.jetty.util.ajax.JSON zum Parsen der JSON-text.
Aber die JSON.parse(string) Methode erzeugt ein Objekt und ich brauche es als eine Karte.
Intern ist es ein Objekt von genau der genannten Klasse.
Aber wie du wirkst, die ein Objekt in eine Map ohne Errichtung einer neuen oder die unchecked cast Warnung?

Derzeit, die ich gefunden habe, nur eine Lösung ohne den unchecked cast Warnung, sondern mit der Errichtung einer neuen Karte, das ist eigentlich natürlich nicht ein casting überhaupt.

private Map<String,Object> getMap(String string) {
    HashMap<String,Object> result = new HashMap<>();
    Object object = JSON.parse(string);
    if (object instanceof Map) {
        Map<?,?> map = (Map)(object);
        for (Map.Entry<?,?> entry : map.entrySet()) {
            String key = entry.getKey().toString();
            Object value = entry.getValue();
            result.put(key,value);
        }
    }
    return result;
}

Also, ob gibt es eine Möglichkeit, um richtig zu wirken, ohne unchecked cast Warnungen?

  • Typ-überprüfung vor der Typumwandlung möglicherweise loswerden der Warnung.
  • Typ-checking ist nicht zu helfen
  • Weil der type erasure, Sie nicht Tippen können überprüfen für eine bestimmte Art von generische Karte. (Zum Beispiel, Sie können nicht unterscheiden Map<String,Object> aus Map<Integer,Object> mit Typ-überprüfung.)
  • Ich habe versucht (object instanceof Map<String,Object>) und es funktioniert nicht, während (object instanceof Map) tut.
  • Sie können zumindest überprüfen, es ist eine Karte. Sie haben immer noch eine raw types Warnung.
  • Map<String,Object> map = (Map)(object) - nicht Map<?,?> map = (Map)(object) - Werke
  • Gibt es einen Weg, um sicher zu überprüfen und warf einen Map<?,?> in eine Map<String,Object> in Java?
  • Nein. Die Laufzeit, die nicht wissen, generische Typen. Es gibt keine Möglichkeit zu sagen, wenn ein unbekannter Map Karten aus Strings zu Objects.
  • Wenn Sie möchten, geben Sie sicher, Sie können nicht hinzufügen nichts auf der Karte und du bekommst sind Objects.
  • Der einzige sichere Typumwandlungen sind downcasts, wie beim casting von String zu Object, aber nicht von Object zu String. Da jeder string ist ein Objekt, aber nicht jedes Objekt ist ein string

InformationsquelleAutor KoichiSenada | 2012-10-17
Schreibe einen Kommentar