为什么在泛型方法中使用反射时会起作用?

sky*_*ght -1 java generics reflection type-erasure

我读到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) );
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

java.lang.Integer
java.lang.Double
false 
Run Code Online (Sandbox Code Playgroud)

我期待c1的类c2的课是Object,也c2.isAssignableFrom(c1)true.我在这里错过了什么?

Boh*_*ian 5

通用与否,每个对象都有一个类,它是您正在调用的类的方法.

如果两个参数都是类型,则此方法将同样有效Object.实际上,将它们设为通用不会增加任何价值,因为您没有使用泛型类型.