【发布时间】:2016-08-20 16:26:05
【问题描述】:
我读到 Java 中的泛型是使用类型擦除实现的。 我想测试一下,看看我是否完全理解了这个概念,但当我发现这段代码完美运行时,我感到惊讶和困惑:
public class Test{
public static void main(String []args){
canAssign3(3,3.2);
}
static<T1,T2> boolean canAssign3(T1 from, T2 to){
Class<?> c1 = from.getClass();
Class<?> c2 = to.getClass();
System.out.println(c1.getName());
System.out.println(c2.getName());
System.out.println(c2.isAssignableFrom(c1));
return (c2.isAssignableFrom(c1) );
}
}
输出:
java.lang.Integer
java.lang.Double
false
我期待c1 的班级和c2 的班级是Object,还有c2.isAssignableFrom(c1) 是true。
我在这里错过了什么?
【问题讨论】:
-
类型擦除发生在编译时。
标签: java generics reflection type-erasure