本帖最后由 黄晶 于 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:}
|