A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 ﹊佑雨时杰↘ 于 2014-4-27 23:35 编辑

// 对接受数组的成员方法进行反射
  1. class TestArguments{
  2.         
  3.         public static void main(String[] args)
  4.         {
  5.                 for (String arg : args)
  6.                 {
  7.                         System.out.println(arg);
  8.                 }
  9.         }
  10.         
  11.         
  12. }

  13. 下面是  调用上面的java_io.TestArguments 类中的main方法  
  14. public static void main(String[] args) throws Exception
  15.         {
  16.         // 对接受数组的成员方法进行反射
  17.                 Method method = Class.forName("java_io.TestArguments").getMethod("main", String [].class);
  18.      // 请注意看这里
  19.              method.invoke(null, new String[]{"111","222","333",});
  20.         }

复制代码


为什么method.invoke(null, new String[]{"111","222","333",});处会有异常Exception in thread "main" java.lang.IllegalArgumentException: wrong number of arguments,
而把它换成method.invoke(null, (Object)new String[]{"111","222","333",}); 或者        method.invoke(null, new Object[]{new String[]{"111","222","333"}}); 就好了  求解

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

4 个回复

倒序浏览
public Object invoke(Object obj,
                     Object... args)

查看API,第二个参数是Object对象,所以需要进行强转
回复 使用道具 举报
查看API文档可以看到:
invoke
public Object invoke(Object obj,
                     Object... args)
              throws IllegalAccessException,
                     IllegalArgumentException,
                     InvocationTargetException对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。个别参数被自动解包,以便与基本形参相匹配,基本参数和引用参数都随需服从方法调用转换。
如果底层方法是静态的,那么可以忽略指定的 obj 参数。该参数可以为 null。
如果底层方法所需的形参数为 0,则所提供的 args 数组长度可以为 0 或 null。
参数:
obj - 从中调用底层方法的对象
args - 用于方法调用的参数
返回:
使用参数 args 在 obj 上指派该对象所表示方法的结果

invoke的两个参数类型都是Object的,所以要进行强行转换

点评

恩 差不多懂了  发表于 2014-4-24 21:03

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报

楼主你好,如果问题已解决,请将帖子改为提问结束,如果没有解决请楼主继续提问,谢谢合作
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马