/ / Casting Object (vom Typ Map <String, String>) für Map <String, Integer> - Java

Casting-Objekt (welches vom Typ Map <String, String>) zu Map <String, Integer> - Java ist

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 № 1

Generische Ü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)));