黑马程序员技术交流社区

标题: 还是反射,JAVA加强23课的一点问题 [打印本页]

作者: 罗杰    时间: 2012-3-29 09:41
标题: 还是反射,JAVA加强23课的一点问题
反射一个接收数组参数的成员函数
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()时指定的参数类型如何写呢?
作者: 马云    时间: 2012-3-29 09:57
收藏了,一会回来研究。
作者: dangfei    时间: 2012-3-29 10:32
一,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);
    }




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