我读到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
}。
我在这里缺少什么?
答案 0 :(得分:5)
通用与否,每个对象都有一个类,它是你要调用的那个类的方法。
如果两个参数都是Object
类型,则此方法可以有效地工作。事实上,将它们设为通用不会增加任何价值,因为您不使用通用类型。