反射调用主方法异常解决
来源:互联网 发布:java求1000以内的质数 编辑:程序博客网 时间:2024/06/03 11:14
利用Java反射机制去调用其他类的main方法基于这种情形:
当程序中的某个类在运行到某处需要去调用其他类的main方法时,如果此程序并不知道此main方法所属类的名称,而只是在程序中接受某一代表此main方法所属类的名称的参数,那么这时候就不能通过“类名.main(String[] args);"这样的方式来完成调用,而需要运用Java的反射机制了,需要编写相关的反射代码来完成对其他类的main方法的调用。
#####
例子:
有一个类,类名为ReflectTest,设定在其main方法中接受的String数据参数的第一个,即args[0]为所要调用的main方法所属类的类名,则与之相关的反射代码为:
String startingClassName = args[0];
Method mainMethod = Class.forName(startingClassName).getMethod("main", "String[].class");
mainMethod.invoke(null, (Object)new String[]{"a", "b", "c"});
这里解释一下(Object)new String[]{"a", "b", "c"}这段代码。
启动Java程序的main方法的参数是一个字符串数组,即public static void main(String[] args),通过反射方式来调用这个main方法时,如何为invoke方法设置参数呢?
按jdk 1.5的语法,由于使用的是可变参数(Object类型),设置的数组参数会被作为一个参数进行传递,而按jdk 1.4的语法,此处应设置一个Object数组,数组中的每个元素对应所调用方法的一个参数。
当把一个字符串数组作为参数传递给invoke方式时,编译器会兼容jdk 1.4的语法,即按照1.4的语法进行处理,即把字符串数组打散成为若干个单独的参数,这样就会产生参数个数不匹配的异常。
解决方法:采用上述强制向上转型后,可以是编译器按照正确的方法进行参数处理,即将整个字符串参数作为整体传递给目标main方法。
注:使用new Object[]{new String[]{"a", "b", "c"}}作为invoke方法的第二个参数也可以得到正确的结果。比如在目标main方法遍历字符串数组元素。
- 反射调用主方法异常解决
- java反射调用String[] wrong number of arguments异常解决
- java反射调用方法时,Class . can not access a member of class . with modifiers "private" 等异常解决
- 反射调用方法时抛出的异常的获取
- 利用反射调用方法抛出的异常如何被捕获?
- 利用反射原理调用方法抛出异常:argument type mismatch
- 方法反射出现异常
- 反射:使用反射调用方法
- java反射调用方法
- 反射的调用方法
- Java反射调用方法
- 使用反射调用方法
- 反射调用main方法
- 利用反射调用方法
- 利用反射调用方法
- 用反射调用方法
- Java 反射 方法调用
- java 反射 方法调用
- Android的Task和Activity相关
- list.orderby()
- 深入探讨PageRank(四):PageRank的危机及搜索引擎的未来
- C++中的内部连接与外部连接(二) -------转载
- C++引用与指针的比较
- 反射调用主方法异常解决
- 在Android中自定义IOS风格的按钮
- 代码自动生成工具MyGeneration使用说明
- permission-sqlmap.xml ( 编号:20110621A1127 )
- 轉載 :【转】android UI 相关常用类简介
- Spring的事务管理
- 李开复谏言学生转学Android软件开发
- 视频播放的基本原理【转贴】
- 解决新内核不能启动问题:kernel panic - not syncing: VFS: unable to mount root fs on unkno