Ich habe einige Codes, der so etwas wie diese (Teil eines negativen Test des Verfahrens get
) aussieht:Keine Classcast beim Gießen zu generischem Typ unterschiedlich tatsächliche Klasse
import java.util.*;
public class Test {
Map<String, Object> map = new HashMap<>();
public static void main (String ... args) {
Test test = new Test();
test.put("test", "value"); // Store a String
System.out.println("Test: " + test.get("test", Double.class)); // Retrieve it as a Double
}
public <T> T get(String key, Class<T> clazz) {
return (T) map.get(key);
}
public void put(String key, Object value) {
map.put(key, value);
}
}
ich es erwarte ein ClassCastException
zu werfen aber es läuft durch erfolgreich drucken:
Test: value
Warum wirft es nicht?
Wie wird der Aufruf 'System.out.println' gedruckt? – mariosangiorgio
@mariosangiorgio: Es wird 'Test: Wert' ausgedruckt. – Dici
Ich habe das Gefühl, es ist mit dem gleichen Grund verbunden, warum Sie einen primitiven Typ für ein generisches Argument nicht übergeben können. Haben Sie versucht, die Werte in der 'Map' von' Object' in etwas anderes zu ändern, zB 'String'? Vielleicht ist es wegen der polymorphen Eigenschaft von 'Object' erlaubt –