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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 罗杰 中级黑马   /  2012-3-29 09:41  /  2122 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

反射一个接收数组参数的成员函数
Method mainMethod = Class.forName(startingClassName).getMethod("main",String[].class);
mainMethod.invoke(null,(Object)new String[]{"111","222"});

问题1:
invoke中将一个Object对象作为参数传入mainMethod,而mainMethod制定的参数类型是String[],为什么不会出错?
问题2:
如果想要反射一个可变参数的成员函数那getMethod()时指定的参数类型如何写呢?

3 个回复

倒序浏览
收藏了,一会回来研究。
回复 使用道具 举报
一,String[]在作为参数传递时,有可能被认为是传递了多个参数,前面加一个(Object)告诉编译器,传过来的就是一个参数。
   在执行方法时候再把Object转换成String。
二,可变参数,终究还是数组,给个参考吧:
public static void main(String[] args) {
                // TODO Auto-generated method stub
                Test5 t5 = new Test5();
                try {
                        Method m = t5.getClass().getMethod("tt", String.class,int[].class);
                       
                        m.invoke(t5, "zhangsan",new int[]{1,2,3});
                } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
               


        }
     public void tt(String str,int ...ts){
            int sum = 0;
           
            for(int t : ts )
            {
                    sum+=t;
            }
            System.out.println(str + "得分:"+sum);
    }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马