思路:泛型只在编译期有效,在运行期会被擦除掉,运行期间获取Class,反射执行add方法。
public class Demo006 {
/**
* @param args
* ArrayList<Integer>的一个对象,在这个集合中添加一个字符串数据,如何实现呢?
* 泛型只在编译期有效,在运行期会被擦除掉
* @throws Exception
*/
public static void main(String[] args) throws Exception {
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(111);
list.add(222);
Class<?> clazz = Class.forName("java.util.ArrayList");
Method method = clazz.getMethod("add", Object.class);
method.invoke(list, "abc");
System.out.println(list);
}
}
本文通过一个具体的示例,展示了如何利用Java反射机制在运行时绕过泛型类型检查,向Integer类型的ArrayList中添加字符串。这揭示了Java泛型在编译期的擦除特性,以及反射在运行时的强大能力。
4377

被折叠的 条评论
为什么被折叠?



