java反射处理数组
来源:互联网 发布:c# socket编程 编辑:程序博客网 时间:2024/05/24 07:01
Java反射中,如果Method的参数里含有数组或者可变参数形式,那么在调用Invoke的时候,稍有点诡异,这里记录一下。可变参数实质就是数组,调用方式和普通数组一样。
用反射方式执行某个类中的main方法
- public class ReflectTest {
- public static void main(String[] args) throws Exception {
- String startingClassName=args[0];
- Method mainMethod=Class.forName(startingClassName).getMethod("main",String[].class);
- //这一点特别注意:这里使用new Object[]数组将new String[] 进行打包成一个对象
- mainMethod.invoke(null,new Object[]{new String[]{"111","222","333"}});
- }
- }
- class TestArguments {
- public static void main(String[] args)
- {
- for(String s:args)
- System.out.println(s);
- }
- }
先看一个简单的类
- public class Target {
- public void arrayInput(String[] inputs) {
- for (String each : inputs) {
- System.out.print(each);
- }
- System.out.println();
- }
- }
看如何反射调用含数组参数的方法
- import java.lang.reflect.Array;
- import java.lang.reflect.Method;
- public class ArrayReflection {
- public static void main(String[] args) {
- Class<Target> clazz = Target.class;
- try {
- Object object = clazz.newInstance();
- // 数组参数的调用方法
- Method arrayInputMethod = clazz.getMethod("arrayInput",
- String[].class);
- // 写法一,可以理解
- Object arrayObj = Array.newInstance(String.class, 2);
- Array.set(arrayObj, 0, "Hello");
- Array.set(arrayObj, 1, "World");
- arrayInputMethod.invoke(object, arrayObj);
- // 写法二,按照Eclipse提示写出来的,不理解
- String[] stringArray = new String[]{"Cafe","Baby"};
- arrayInputMethod.invoke(object, new Object[] { stringArray });
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
看输出:
如果这样写
- arrayInputMethod.invoke(object, new String[]{"wrong","style"});
会报如下错误
java.lang.IllegalArgumentException: wrong number of arguments
阅读全文
0 0
- java反射处理数组
- java数组反射
- java反射 String数组
- Java反射:数组
- Java反射八 数组
- 反射处理java泛型
- java 反射处理java泛型
- 黑马程序员-java反射--数组的反射
- Java反射机制之数组的反射
- java中数组的反射
- 《黑马程序员》java 数组反射
- (翻译)反射处理java泛型
- Java使用反射处理注解
- java数组,通过反射操作数组
- Java二维数组处理
- Java 数组 异常处理
- Java 反射机制 反射数组 wrong number of arguments 异常
- 【java高级特性之反射】数组的反射
- Cyborg Genes UVA
- 设置单个用户打开文件数
- 深入理解 JavaScript 方法集的特性与最佳实践
- Unity中多个C#脚本中的Awake执行顺序
- php 常用函数总结
- java反射处理数组
- Android WebView滑动隐藏Toolbar
- Bootstrap 栅格系统响应式布局
- 2017/10/12学习笔记
- Nginx 运维
- 视觉SLAM漫谈
- javascript惯用的107条语句,新手必备
- 主元素-LintCode
- java、PHP 连接数据库的基本方法