黑马程序员技术交流社区

标题: 这句代码谁能解释一下,泛型反射问题,求 [打印本页]

作者: 我能驾驭住    时间: 2012-6-4 23:13
标题: 这句代码谁能解释一下,泛型反射问题,求
package Demo.collection;

import java.lang.reflect.*;
import java.util.ArrayList;

public class Deni {

        /**
         * @param args
         */
        public static void main(String[] args) throws Exception{
                // TODO Auto-generated method stub
                /*ArrayList collection = new ArrayList();
                collection.add(1);
                collection.add(1L);
                collection.add("abc");
                int i = (Integer)collection.get(1);//编译要强制类型转换且运行时出错!
*/               
                ArrayList<String> collection2 = new ArrayList<String>();
                collection2.add("abc");
                collection2.add("abcd");
                //collection2.add("abc");//这两行代码编译时就报告了语法错误
                String i2 = collection2.get(0);//不需要再进行类型转换
                //System.out.println(i2);
               
                Constructor<String> constructor = String.class.getConstructor(StringBuffer.class);
                String str2 = constructor.newInstance(new StringBuffer("abcde"));
                System.out.println(str2.charAt(4));
               
                ArrayList<Integer> al = new ArrayList<Integer>();
                System.out.println(al.getClass()==collection2.getClass());

                //al.add("abc");
                al.getClass().getMethod("add",Object.class).invoke(al,"abc");
                System.out.println(al.get(0));
        }

}
结果:
e
true
abc
作者: 黑马11期李项京    时间: 2012-6-4 23:46
al.getClass().getMethod("add",Object.class).invoke(al,"abc");
                System.out.println(al.get(0));
al.getClass()获取字节码返回Class类,调用Class的方法getMethod("add",Object.class)这里有两个参数,第一个参数是方法名,第二个参数是要方法要传入的参数的字节码类型,这里用String.class也可以,调用Method类的方法invoke(al,"abc"),第一个参数是方法所属对象名,第二个参数是方法要传入的参数
作者: 杜俊彪    时间: 2012-6-4 23:59
分开写你就好明白了; Method method = al.getClass().getMethod("add",Object.class) ;  这句话是得到集合al的add(Object obj) 方法;   
method.invoke(al,"abc");   表示 集合al去调用这个add(Object obj)方法,即al.add("abc") ;           然后将它输出来;         System.out.println(al.get(0));     

作者: 郭宁    时间: 2012-6-5 00:22
al.getClass()//得到al的类
.getMethod("add",Object.class)//得到这个类的add(Object obj)方法
.invoke(al,"abc");//在对象al上调用这哥方法,传个参数"abc"  (等同于    al.add("abc"))***为啥能用在对象al上调用这个歌方法?因为这个方法 是从al所属的类中得到的!
下一句 输出就不用说了吧






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2