本帖最后由 周世阳 于 2012-8-8 10:37 编辑
a1.getClass() == a3.getClass()报错是因为他们的参数化类型不兼容
如果先
Class c1 = a1.getClass();
Class c3 = a3.getClass();
然后
System.out.println(c1 == c3); 就不会报错
这是因为a1和a3虽然参数化类型且不兼容,但是在赋值的过程中给了原始类型Class c1,和Class c2,泛型只存在于编译期,而编译器只会逐行扫描,
当扫描到System.out.println(c1 == c3);时,因为c1和c2都是原始类型,所不不存在兼容问题,自然不会报错
视频种有个例子:
如果Vector<Object> v1 = new Vector<String>()编译无法通过
而Vector v1 = new Vector<String>();
Vector<Object> v = v1;
则可以通过,也是这个原因。
|