黑马程序员技术交流社区
标题:
往泛型为Integer的集合存放一个String类型的数据【面试题】
[打印本页]
作者:
lwj123
时间:
2015-2-11 16:56
标题:
往泛型为Integer的集合存放一个String类型的数据【面试题】
package lwj_test;
import java.lang.reflect.Method;
import java.util.ArrayList;
/*
* 我给你ArrayList<Integer>的一个对象,我想在这个集合中添加一个字符串数据,如何实现呢?
*
* 通过反编译后可以看出,add方法实质上接收的还是Object类型,所以我们办法获取Arralist的字节码文件对象然后对add方法进行操作
* 分析:
* A:创建集合对象
* B:获取该集合类的字节码文件对象
* C:获取集合中add方法对应的Method对象
* D:调用这个方法,参数为String类型
* E:打印这个集合
*/
public class ArrayListDemo {
public static void main(String[] args) throws Exception {
ArrayList<Integer> al = new ArrayList<Integer>();
al.add(10);
// 反编译后是这样的
// ArrayList al = new ArrayList();
// al.add(Integer.valueOf(10));
// 反编译后可以看出:是不需要泛型的,泛型只是编译时其作用的,所以说add方法参数的默认类型是Object
// 获取ArrayList类的字节码文件对象
Class c = ArrayList.class;
// 获取add方法对应的Method对象
Method method = c.getDeclaredMethod("add", Object.class);
// 调用这个方法
method.invoke(al, "hello");
method.invoke(al, "world");
method.invoke(al, "java");
method.invoke(al, 'a');
System.out.println(al);
// al.add("hello");
}
}
复制代码
作者:
Gonnaloveu
时间:
2015-2-11 17:49
我记得原来有个人发了个贴是自己额外造了个方法,没用反射也给存里了,方法参数不写泛型就可以了.也就是说不让编译器发现就没问题.
作者:
Gonnaloveu
时间:
2015-2-11 17:55
我能给你写出来,原帖早不知道沉到哪里去了.下面是我自己写的,不能保证和原来一样,但大致是一个意思:
import java.util.ArrayList;
public class Test1 {
public static void main(String[] args) {
ArrayList<Integer> al = new ArrayList<>();
conceal(al,"这是String对象");
System.out.println(al);
}
public static void conceal(ArrayList al,String s){
al.add(s);
}
}
复制代码
adaaaaaaaaaaaaaaaa.png
(11.75 KB, 下载次数: 48)
下载附件
2015-2-11 17:55 上传
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2