Ho qualche codice che assomigli a questo (parte di un test negativo del metodo get
):No ClassCastException in fase di lancio di tipo generico diverso da classe reale
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);
}
}
mi aspettavo di gettare un ClassCastException
ma viene stampato con successo:
Test: value
Perché non gettare?
Cosa stampa la chiamata 'System.out.println'? – mariosangiorgio
@mariosangiorgio: stampa 'Test: valore'. – Dici
Ho la sensazione che sia collegato allo stesso motivo per cui non è possibile passare un tipo primitivo per un argomento di tipo generico. Hai provato a cambiare i valori in 'Map' da' Object' a qualcos'altro, come 'String'? Forse è permesso a causa della proprietà polimorfica di 'Object' –