Почему не выдает СlassСastException и в типизированную коллекцию можно положить значение любого типа?
Прошу помочь разобраться в странном поведении кода на Java8
(в последующих версиях ClassCastException
формируется):
public class CheckSomeThings {
public static Map<Object, Object> map = new HashMap<>();
public static void main(String[] args) throws NoSuchFieldException {
map.put("Date", new Date());
map.put("Integer", Integer.valueOf(5));
List<String> list = new ArrayList<>();
list.add(getMapValue("Date"));
list.add(getMapValue("Integer"));
Map<String, String> maps = new HashMap<>();
maps.put("value1", getMapValue("Date"));
maps.put("value2", getMapValue("Integer"));
System.out.println(list);
System.out.println(maps);
}
public static <T> T getMapValue(Object key) {
return (T) map.get(key);
}
}
Фактически с помощью такой конструкции в типизированную коллекцию можно положить значение любого типа:
Источник: Stack Overflow на русском