黑马程序员技术交流社区
标题:
反射的问题
[打印本页]
作者:
黄晶
时间:
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