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

时间:2016-08-20 16:26:05

标签: 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) );
    }
}

输出:

java.lang.Integer
java.lang.Double
false 

我期待c1的课程和c2的课程为Object,同时c2.isAssignableFrom(c1)true }。 我在这里缺少什么?

1 个答案:

答案 0 :(得分:5)

通用与否,每个对象都有一个类,它是你要调用的那个类的方法。

如果两个参数都是Object类型,则此方法可以有效地工作。事实上,将它们设为通用不会增加任何价值,因为您不使用通用类型。