最近在看深入理解JVM,随手写了一点代码,有个问题不太理解。
代码如下:
public static void main(String[] args) throws Exception {
HashMap<Integer, String> map = new HashMap<Integer, String>();
Method put = HashMap.class.getMethod("put", Object.class, Object.class);
put.invoke(map, 1, new Object());
System.out.println(map);
String val = map.get(1);
System.out.println(val);
}
执行结果(编译和执行版本都是1.6):
{1=java.lang.Object@2e6e1408}
Exception in thread "main" java.lang.ClassCastException: java.lang.Object cannot be cast to java.lang.String
at T002.main(T002.java:12)
报错是在String val = map.get(1);这一行。
我不解的是:
通过反射,Integer-Object键值对竟然正确地放进了Integer-String的HashMap中!
这种不合理的结果,应当是很严重的BUG了吧,但是也从没听谁提到过。
希望大家多多指点