zoukankan      html  css  js  c++  java
  • Java反射,参数为数组

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

    实例

    比如:

    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)
  • 相关阅读:
    iOS网络开发之AFNetworking
    TCP/IP、Http、Socket的区别
    iOS开发
    iOS 10相关技术
    HTTP协议详解
    HTTPS和HTTP的区别
    CocoaPods
    关于 iOS 10 中 ATS 的问题
    Run Loop详解
    iOS开发项目之MVC与MVVM
  • 原文地址:https://www.cnblogs.com/avenwu/p/4193000.html
Copyright © 2011-2022 走看看