Java中的反射与泛型

165 阅读1分钟

反射:Java在运行期间通过反射机制,动态地获取Class对象。 泛型:在编译期间对类型进行检查,实际上Java虚拟机没有泛型类型的对象,Java中泛型采用类型擦除的方式去实现,也就是平常所说的伪泛型。 实例:定义一个List list,使用反射在list中装载Integer对象。

        List<String> list =new ArrayList<>();
        list.add("abc");
        Class<? extends List> c = list.getClass();
        Method method=c.getMethod("add",Object.class);
        method.invoke(list,123);
        Object s = list.get(1);
        System.out.println(s);
        System.out.println(s.getClass());

原理:因为泛型的作用层在编译时,而在运行时泛型会被擦除,而反射在运行时获取到list的add方法,直接在运行时添加了数据,跳过了编译期。