A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冯景超 中级黑马   /  2015-11-24 01:20  /  3019 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1黑马币
* 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)来进行设置权限.
   
  思考:
  

最佳答案

查看完整内容

import java.lang.reflect.Method; import java.util.ArrayList; public class Test1 { public static void main(String[] args) throws Exception { ArrayList list = new ArrayList();//定义泛型为Integer 的ArrayList集合。 String str = "abc"; Method methodAdd = list.getClass().getMethod("add", Object.class);//通过反射获得add 的方法。 methodAdd.invoke(list, str); System.out.println(l ...

2 个回复

倒序浏览
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);
        }

}
回复 使用道具 举报
就是你写的思路啊。。。。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马