使用反射调用非公开的方法有时能解决许多问题,如果方法的参数是数组时类型该怎么传递呢?这里找到了一种方法记录一下

实例

比如:

class A{private void sayHello(String[] names){//...System.out.println("sayHello invoked");}
}String[] names = new String[]{"A", "B", "C"};
Method sayHello = A.class.getDeclaredMethod("sayHello", String[].class);
sayHello.setAcess(true);
sayHello.invoke(new A(), new Object[]{names});

这里有两个地方需要注意

  • A.class.getDeclaredMethod时后面的参数是数组,用加[];
  • sayHello.invoke调用时直接传一个String[]实例会报异常,需要再次用Object[]包装一下;

异常,比较奇怪,google后找到上面的解决方法:

java.lang.IllegalArgumentException: argument 1 should have type     java.lang.String[], got java.lang.String
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)

Java反射,参数为数组相关推荐

  1. java 可变参数列表 数组_java可变参数列表如何填充数组?

    在对于数组的填充上,我们可以运行参数的传递,把数组作为可变参数的列表进行调整.对于一些参数个数和类型未知的时候,这种方法就能帮助我们解决填充数组的难题,因为这种方法并不需要提前知道.下面我们就可变参数 ...

  2. java 反射 参数名_JAVA 8 反射获取参数名

    前言 在JDK8之前javac编译是不会把构造器和方法的参数名编译进class中,如果需要获取参数名,可以在方法上加上注解,反射获取注解的值从而获取参数名,比如Jackson的@JsonCreator ...

  3. java 反射 参数 注解_Java编程之反射中的注解详解

    "注解"这个词,可谓是在Java编程中出镜率比较高,而且也是一个老生常谈的话题.我们之前在聊Spring相关的东西时,注解是无处不在,之前我们简单的聊过一些"注解&quo ...

  4. java arraycopy 参数_java 数组复制:System.arrayCopy 深入解析

    先看ArrayList源码中数组复制的代码: 其实ArrayList 就是一个数组的形式存放数据的.没有高深的地方. 他的性能在于他的索引能力,正因为他是数组形式,所以索引元素的时候他表现得非常的快速 ...

  5. java反射机制之数组转对象

    一.反射对象帮助类 /***@Description TODO 将数组转换成对象 注意参数要一一致*@Author QuZhangJing*@Date 17:54 2018/8/30*@Version ...

  6. java 可变参数--传数组(转)

    public class TestVarArgus { • public static void dealArray(int... intArray){ • for (int i : intArray ...

  7. java 数组 反射_【译】10. Java反射——数组

    ===================================================================================== 用Java反射来处理数组有时 ...

  8. Java反射09 : 参数Parameter学习示例

    超级通道: Java泛型学习系列-绪论 java.lang.reflect.Parameter类提供了用于获取和操作构造器的静态方法. 1.通过Parameter可以做什么 通过Parameter可以 ...

  9. java 反射调用方法_java的反射机制,以及通过反射获取方法,变量等操作

    我们应用会用到反射这个知识点,肯定是想要在运行时得到类的信息,根据类的那些信息去做一些特定的操作.那么,首先无疑就是得到类的信息,在JDK中提供了Class对象来保存类的信息.所以,反射的第一步就是得 ...

最新文章

  1. 如何将数据库的数据导入到csv文件中
  2. C/C++中volatile关键字详解
  3. c/c++宏函数的定义与使用(宏定义函数)(macro definition)
  4. 高端大气上档次的官网介绍导航页源码
  5. 数据库的备份 mysql
  6. 构建企业服务之Windows Server 2008 DNS 高级部署
  7. 【Proteus仿真8086】并行接口芯片8255
  8. this 改变this的指向
  9. HDU 1024 (不重叠m段最大和) Max Sum Plus Plus
  10. [leedcode 137] Single Number II
  11. 阿里云云计算 9 弹性裸金属服务器(神龙)
  12. foremost的下载安装使用说明
  13. 【前端】html页面的字体代码表及字体效果对比
  14. 远程接入CBTS的应用
  15. 冒泡排序c语言标准代码,C语言实现冒泡排序法和选择排序法代码参考
  16. python ocr 识别发票_在Python中使用Tesseract进行OCR识别
  17. 进化算法——反向学习
  18. 施努卡:机器视觉公司排名(机器人视觉系统)
  19. 计算机操作系统学习笔记----进程管理
  20. R语言--rep函数

热门文章

  1. VTK:几何对象之Quad
  2. OpenCV放大图像:多输出
  3. OpenCV配置选项参考
  4. C语言通过链表指针删除链表节点的算法(附完整源码)
  5. C语言实现队列ADT(Queue ADT)接口COMP2521(附完整源码)
  6. C语言通过用户输入将八进制转换为十六进制(附完整源码)
  7. C++ decltype关键字
  8. QT的QColor 类的使用
  9. 经典C语言程序100例之五零
  10. C++ 中的 new/delete 和 new[]/delete[]