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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

3 个回复

倒序浏览
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"),第一个参数是方法所属对象名,第二个参数是方法要传入的参数

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
分开写你就好明白了; 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));     
回复 使用道具 举报
al.getClass()//得到al的类
.getMethod("add",Object.class)//得到这个类的add(Object obj)方法
.invoke(al,"abc");//在对象al上调用这哥方法,传个参数"abc"  (等同于    al.add("abc"))***为啥能用在对象al上调用这个歌方法?因为这个方法 是从al所属的类中得到的!
下一句 输出就不用说了吧

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马