我讀到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
。 我在這裏錯過了什麼?
類型擦除發生在編譯時。 –