我在教学生老式泛型时,遇到了一个看不见的问题!我在演讲时的行为!:(
我有一个简单的课程
public class ObjectUtility {
public static void main(String[] args) {
System.out.println(castToType(10,new HashMap<Integer,Integer>()));
}
private static <V,T> T castToType(V value, T type){
return (T) value;
}
}
这给出的输出为 10,没有任何错误!我期望这会给我一个 ClassCastException,并出现一些错误,例如 Integer Cannot be Cast to HashMap。
好奇又愤怒,我尝试了getClass()返回值,如下所示
System.out.println(castToType(10,new HashMap<Integer,Integer>()).getClass());
正如我所料,它抛出了 ClassCastException 。
另外,当我将同一个语句分成两部分时,就像
Object o = castToType(10,new HashMap<Integer,Integer>());
System.out.println(o.getClass());
它不会抛出任何错误并打印class java.lang.Integer
全部执行
openjdk version "1.7.0_181"
OpenJDK Runtime Environment (Zulu 7.23.0.1-macosx) (build 1.7.0_181-b01)
OpenJDK 64-Bit Server VM (Zulu 7.23.0.1-macosx) (build 24.181-b01, mixed mode)
有人能指出我为什么会发生这种行为的正确方向吗?
海绵宝宝撒
catspeake
相关分类