黑马程序员技术交流社区

标题: 反射的问题 [打印本页]

作者: 黄晶    时间: 2012-12-10 14:56
标题: 反射的问题
本帖最后由 黄晶 于 2012-12-10 15:06 编辑

先看一下代码:
public class InvokeMain
{
         public static void main(String[] args) throws Exception
         {
                 String str = args[0];//args[0]的值是Main类的类名
                 
                 Method methodMain = Class.forName(str).getMethod("main", String[].class);
                 //methodMain.invoke(null, new String[]{"jeek", "wong"});错误!!!!!
                 methodMain.invoke(null, new Object[]{new String[]{"jeek", "wong"}});//正确
                 //methodMain.invoke(null, (Object)new String[]{"jeek", "wong"});正确
         }
}

class Main
{
         public static void main(String[] args)
         {
                 for(String arg : args)
                 {
                         System.out.println(arg);
                 }
         }
}
上面实现的是通过反射方式调用调用一个类的main方法..代码中做标记处有点疑惑...
invoke方法的第二个参数是可变参数,public Object invoke(Object obj,Object... args)
传入的可变参数可以看做是一个数组传入.为啥直接传入 new String[]{"jeek", "wong"} 会运行出错.???!!!!

下面也是一个可变参数的问题
定义了一个字符串数组         String[] a = new String[]{"ab", "bc", "cd"};
使用Arrays这个数组工具类中asList方法.
asList的定义是public static <T> List<T> asList(T... a) 也是接收可变参数...
执行语句System.out.println(Arrays.asList(a));结果正确.......

这把我弄晕了...
上面的两段代码中都使用了可变参数.(Object... obj).传入String[] 就不同了..
为什么第一个挂了..两者有什么区别吗???{:soso_e135:}{:soso_e135:}







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