我们都知道java在加入泛型之后ArrayList<Integer>的集合是无法添加字符串的,但是我就看到一道面试题,是这样的:
我给你ArrayList<Integer>的一个对象,我想在这个集合中添加一个字符串数据,如何实现呢?
下面就来说说怎么实现这个
先写一段代码:
public class ArrayListDemo {
public static void main(String[] args) {
ArrayList<Integer> array = new ArrayList<Integer>();
array.add(10);
System.out.println(array);
}
}
然后我们用反编译工具打开可以看到
public class ArrayListDemo {
public static void main(String[] args) {
ArrayList array = new ArrayList();
array.add(Integer.valueOf(10));
System.out.println(array);
}
}
可以看到本来的 <Integer> 不见了,说明<Integer>只是给编译器看的,真正运行时并不存在的。同时我们也看到ArrayList里面装的Object类型的因此,我们可以这样修改代码
public class ArrayListDemo {
public static void main(String[] args) throws Exception {
ArrayList<Integer> array = new ArrayList<Integer>();
array.add(10);
System.out.println(array);
Class<?> c = array.getClass();
Method addMethod = c.getMethod("add",Object.class);
addMethod.invoke(array, "hello");
addMethod.invoke(array, "word");
System.out.println(array);
}
}
运行结果
[10]
[10, hello, word]