黑马程序员技术交流社区

标题: 那位仁兄解释一下这一道题 [打印本页]

作者: 冯景超    时间: 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