泛型结合反射向指定类型的集合加入其他数据类型
泛型结合反射向指定类型的集合加入其他数据类型
解析:将集合实现类应用反射获取 集合实现类的类对象, 然后使用该反射对象获取其add方法,将方法参数设置为所有参数的父类 Object.class
代码如下:
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
public class Reflect02 {
public static void main(String[] args) {
// 泛型结合反射绕过编译器限制
// 向给定类型的集合加入其他类型的数据
ArrayList<String> list = new ArrayList<String>();
list.add("Cool.R");
//获取ArrayList类的类对象(字节码对象)
Class<?> clazz = list.getClass();
Method md;
try {
//获取ArrayList类的add方法,参数设置为父类Object类型
md = clazz.getDeclaredMethod("add", Object.class);
//调用获取的方法,加入整形666
md.invoke(list, 666);
} catch (NoSuchMethodException | SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//输出集合内容
System.out.println(list);
}
}
运行效果: