黑马程序员技术交流社区
标题:
那位仁兄解释一下这一道题
[打印本页]
作者:
冯景超
时间:
2015-11-24 01:20
标题:
那位仁兄解释一下这一道题
* 3、 ArrayList<Integer> list = new ArrayList<Integer>();
在这个泛型为Integer的ArrayList中存放一个String类型的对象。
思路:
1.给泛型为Integer的ArrayList中添加一个String类型对象,为什么会
添加不进去?
2.是因为ArrayList只接受Integer类型,那么,我让它不只是接受Integer
不就可以了吗?
3.如何让它不是只接受Integer呢?既然是接收,靠什么接受?自然是ArrayList中的add方法了.
4.既然是一个方法,我通过反射将方法接受类型改变,不就O了吗?
5.想反射,首先要对象字节码对象,想获取方法,还需要一个ArrayList对象.还好,对象已经有了...
总结:
1.所谓的泛型,也就是在方法上对于接受的类型进行了一个限定.
2.反射方法和字段以及构造,字节码就是必须的.运行方法,对象也是必要的.
只是构造本来就是new对象的,而获取字段和方法需要有字节码对象,运行,就要有对象参与.
3.对于反射,一定需求注意的是反射的对象所被修饰的修饰符是什么?如果是public修饰的,直接可以getMethod()这种形式就可以,如果是默认的,就需要通过getDeclaredMethod()才可以,要是private的话,对不起,必须要通过暴力反射了,就是要通过getDeclaredMethod(),并设置me.setAccessible(true)来进行设置权限.
思考:
作者:
mars314
时间:
2015-11-24 01:20
import java.lang.reflect.Method;
import java.util.ArrayList;
public class Test1
{
public static void main(String[] args) throws Exception
{
ArrayList<Integer> list = new ArrayList<Integer>();//定义泛型为Integer 的ArrayList集合。
String str = "abc";
Method methodAdd = list.getClass().getMethod("add", Object.class);//通过反射获得add 的方法。
methodAdd.invoke(list, str);
System.out.println(list);
}
}
作者:
mars314
时间:
2015-11-25 15:18
就是你写的思路啊。。。。。。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2