ich habe ein Object
welches vom Typ ist Map<String, String>
das hat nur wenige Einträge. Ich habe erwartet, eine zu bekommen ClassCastException
beim Wirken dieses Objektes auf Map<String, Integer>
. Aber die Besetzung war erfolgreich. Warum hat dies keine Ausnahme ausgelöst?
Map<String, String> map1 = new HashMap<>();
map1.put("key1", "value1");
map1.put("key2", "value2");
Object o = map1;
Map<String, Integer> map2 = (Map<String, Integer>) o;
Bearbeiten: Casting von o
nicht map1
.
Antworten:
0 für die Antwort № 1Generische Überprüfungen werden zur Kompilierungszeit durchgeführt, während die Casting-Überprüfung zum Zeitpunkt der Ausführung des Programms erfolgt. Sie hatten also zur Laufzeit eine Casting-Ausnahme.
Sie analysieren es als Integer.parseInt (String) und setzen den Wert in map2.
0 für die Antwort № 2
Bist du sicher, dass es richtig ist? Ihr Beispiel kann nicht kompiliert werden:
Error:(21, 60) java: incompatible types: java.util.Map<java.lang.String,java.lang.String> cannot be converted to java.util.Map<java.lang.String,java.lang.Integer>
Wenn Sie jedoch von map1 nach o wechseln, wird Folgendes kompiliert:
//...
Object o = map1;
Map<String, Integer> map2 = (Map<String, Integer>) o;
Vielleicht suchen Sie so etwas?
Map<String, String> map1 = new HashMap<>();
map1.put("key1", "1");
map1.put("key2", "2");
Map<String, Integer> map2 = new HashMap<>();
map1.forEach((key,value) -> map2.put(key, Integer.parseInt(value)));