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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 杜光 于 2013-7-5 15:20 编辑

求解:关于“java.lang.IllegalArgumentException: wrong number of argumen”的解决办法

源代码如下:

  1. package com.yb.TestFile;

  2. import java.lang.reflect.Method;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. /**
  6. * ----------------------------
  7. * @描述 TODO
  8. * @author Michael
  9. * @日期 2013-7-4
  10. *-----------------------------
  11. */
  12. public class TestFile {
  13.     public static void main(String[] args) throws Exception {
  14.         // TODO Auto-generated method stub
  15.         List<Integer> list = new ArrayList<Integer>();     //定义Integer泛型
  16.         String str = "abc";
  17.         Method[] method = list.getClass().getMethods();    //取得list的所有方法
  18.         System.out.println(method.length);
  19.         for(int i=0; i<method.length; i++) {
  20.             System.out.println(method[i]);                 //遍历打印list的方法
  21.         }
  22.         //通过反射来执行list的第一个方法,第一个是list对象,代表该对象的方法,第二个是方法参数
  23.         method[0].invoke(list,str);
  24.         System.out.println(list.size());
  25.         for(int i=0; i<list.size(); i++) {
  26.             System.out.println(list.get(i));
  27.         }
  28.     }
  29. }
复制代码
=============运行结果如下=====================
35
public java.lang.Object java.util.ArrayList.clone()
public void java.util.ArrayList.add(int,java.lang.Object)
public boolean java.util.ArrayList.add(java.lang.Object)
public boolean java.util.ArrayList.contains(java.lang.Object)
public java.lang.Object java.util.ArrayList.get(int)
public int java.util.ArrayList.indexOf(java.lang.Object)
public boolean java.util.ArrayList.isEmpty()
public int java.util.ArrayList.lastIndexOf(java.lang.Object)
public int java.util.ArrayList.size()
public java.util.List java.util.ArrayList.subList(int,int)
public java.lang.Object[] java.util.ArrayList.toArray(java.lang.Object[])
public java.lang.Object[] java.util.ArrayList.toArray()
public boolean java.util.ArrayList.addAll(java.util.Collection)
public boolean java.util.ArrayList.addAll(int,java.util.Collection)
public java.util.Iterator java.util.ArrayList.iterator()
public boolean java.util.ArrayList.remove(java.lang.Object)
public java.lang.Object java.util.ArrayList.remove(int)
public void java.util.ArrayList.clear()
public java.lang.Object java.util.ArrayList.set(int,java.lang.Object)
public void java.util.ArrayList.ensureCapacity(int)
public void java.util.ArrayList.trimToSize()
public java.util.ListIterator java.util.ArrayList.listIterator()
public java.util.ListIterator java.util.ArrayList.listIterator(int)
public boolean java.util.ArrayList.removeAll(java.util.Collection)
public boolean java.util.ArrayList.retainAll(java.util.Collection)
public int java.util.AbstractList.hashCode()
public boolean java.util.AbstractList.equals(java.lang.Object)
public java.lang.String java.util.AbstractCollection.toString()
public boolean java.util.AbstractCollection.containsAll(java.util.Collection)
public final native java.lang.Class java.lang.Object.getClass()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
Exception in thread "main" java.lang.IllegalArgumentException: wrong number of arguments
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:601)
      at com.yb.TestFile.TestFile.main(TestFile.java:24)

请问红色部分异常如何解决啊???

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

11 个回复

倒序浏览
编译出错,应该获取异常用了try{}catch{}
再试试,。,
List<Integer> list = new ArrayList<Integer>();     //定义Integer泛型
        String str = "abc";
        Method[] method = list.getClass().getMethods();     //取得list的所有方法
        System.out.println(method.length);
        for(int i=0; i<method.length; i++) {
            System.out.println(method);     //遍历打印list的方法
        }
        try {
                        method[0].invoke(list,str);
                } catch (Exception e) {
                        System.out.println(e);
                }     //通过反射来执行list的第一个方法,第一个是list对象,代表该对象的方法,第二个是方法参数
        System.out.println(list.size());
        for(int i=0; i<list.size(); i++) {
            System.out.println(list.get(i));
        }

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 王洪波 于 2013-7-4 20:26 编辑
  1. public class TestFile {
  2.     public static void main(String[] args) throws Exception {
  3.         // TODO Auto-generated method stub</P>
  4.         List<Integer> list = new ArrayList<Integer>();     //定义Integer泛型
  5.         String str = "abc";
  6.         Method[] method = list.getClass().getMethods();     //取得list的所有方法
  7.         System.out.println(method.length);
  8.         for(int i=0; i<method.length; i++) {
  9.                 /*这里是我改的地方,原先你写的我没测出异常,但我觉得有问题,所以改了下,以便更好理解.不知改的是不是你的意图*/
  10.             System.out.println(method[i].getName());     //遍历打印list的方法
  11.         }
  12.         method[0].invoke(list,str);     //通过反射来执行list的第一个方法,第一个是list对象,代表该对象的方法,第二个是方法参数
  13.         System.out.println(list.size());
  14.         for(int i=0; i<list.size(); i++) {
  15.             System.out.println(list.get(i));
  16.         }
  17.     }
  18. }
复制代码
以下是运行结果:
35
add
add
get
clone
indexOf
clear
contains
isEmpty
lastIndexOf
addAll
addAll
size
toArray
toArray
remove
remove
set
ensureCapacity
trimToSize
equals
hashCode
iterator
subList
listIterator
listIterator
toString
containsAll
removeAll
retainAll
wait
wait
wait
getClass
notify
notifyAll
1
abc


评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
oxf974025918 发表于 2013-7-4 18:56
编译出错,应该获取异常用了try{}catch{}
再试试,。,
List list = new ArrayList();     //定义Integer泛 ...

我就奇了怪了,依然有异常???怎么回事儿呢?
回复 使用道具 举报
王洪波 发表于 2013-7-4 20:23
以下是运行结果:
35
add

为什么我按照你那谢了,依然有异常啊~~~怎么回事儿啊?
回复 使用道具 举报
public class IllegalArgumentExceptionextends RuntimeException抛出的异常表明向方法传递了一个不合法或不正确的参数。
但我运行了下你的代码,没报运行异常!!!
回复 使用道具 举报
我试了可以执行,。
  1. List<Integer> list = new ArrayList<Integer>();     //定义Integer泛型
  2.         String str = "abc";
  3.         Method[] method = list.getClass().getMethods();     //取得list的所有方法
  4.         System.out.println(method.length);
  5.         for(int i=0; i<method.length; i++) {
  6.             System.out.println(method);     //遍历打印list的方法
  7.         }
  8.         try {
  9.                         method[0].invoke(list,str);
  10.                 } catch (Exception e) {
  11.                         System.out.println(e);
  12.                 }     //通过反射来执行list的第一个方法,第一个是list对象,代表该对象的方法,第二个是方法参数
  13.         System.out.println(list.size());
  14.         for(int i=0; i<list.size(); i++) {
  15.             System.out.println(list.get(i));
  16.         }
复制代码
回复 使用道具 举报
oxf974025918 发表于 2013-7-5 12:38
我试了可以执行,。


真是奇了怪了?难道我的编译器出故障了??你就是只加了一个try...catch对吗?其他地方没改吧
回复 使用道具 举报
棉/mg花/x糖 发表于 2013-7-5 12:50
真是奇了怪了?难道我的编译器出故障了??你就是只加了一个try...catch对吗?其他地方没改吧 ...
  1. 35
  2. [Ljava.lang.reflect.Method;@1bc4459
  3. [Ljava.lang.reflect.Method;@1bc4459
  4. [Ljava.lang.reflect.Method;@1bc4459
  5. [Ljava.lang.reflect.Method;@1bc4459
  6. [Ljava.lang.reflect.Method;@1bc4459
  7. [Ljava.lang.reflect.Method;@1bc4459
  8. [Ljava.lang.reflect.Method;@1bc4459
  9. [Ljava.lang.reflect.Method;@1bc4459
  10. [Ljava.lang.reflect.Method;@1bc4459
  11. [Ljava.lang.reflect.Method;@1bc4459
  12. [Ljava.lang.reflect.Method;@1bc4459
  13. [Ljava.lang.reflect.Method;@1bc4459
  14. [Ljava.lang.reflect.Method;@1bc4459
  15. [Ljava.lang.reflect.Method;@1bc4459
  16. [Ljava.lang.reflect.Method;@1bc4459
  17. [Ljava.lang.reflect.Method;@1bc4459
  18. [Ljava.lang.reflect.Method;@1bc4459
  19. [Ljava.lang.reflect.Method;@1bc4459
  20. [Ljava.lang.reflect.Method;@1bc4459
  21. [Ljava.lang.reflect.Method;@1bc4459
  22. [Ljava.lang.reflect.Method;@1bc4459
  23. [Ljava.lang.reflect.Method;@1bc4459
  24. [Ljava.lang.reflect.Method;@1bc4459
  25. [Ljava.lang.reflect.Method;@1bc4459
  26. [Ljava.lang.reflect.Method;@1bc4459
  27. [Ljava.lang.reflect.Method;@1bc4459
  28. [Ljava.lang.reflect.Method;@1bc4459
  29. [Ljava.lang.reflect.Method;@1bc4459
  30. [Ljava.lang.reflect.Method;@1bc4459
  31. [Ljava.lang.reflect.Method;@1bc4459
  32. [Ljava.lang.reflect.Method;@1bc4459
  33. [Ljava.lang.reflect.Method;@1bc4459
  34. [Ljava.lang.reflect.Method;@1bc4459
  35. [Ljava.lang.reflect.Method;@1bc4459
  36. [Ljava.lang.reflect.Method;@1bc4459
  37. 1
  38. abc
复制代码
这是结果,你拿我的代码直接放入你的mian里面执行下
回复 使用道具 举报
oxf974025918 发表于 2013-7-5 14:06
这是结果,你拿我的代码直接放入你的mian里面执行下

嗯,谢谢了,可能跟JDK有关系吧;
我把method[0].invoke(aList,str);改为:
method[2].invoke(aList,str);

就通过了~~~获得add方法的位置没搞正确啊
回复 使用道具 举报
哪颗最亮的星星 发表于 2013-7-5 12:20
public class IllegalArgumentExceptionextends RuntimeException抛出的异常表明向方法传递了一个不合法或 ...

嗯,谢谢了,可能跟JDK有关系吧;
我把method[0].invoke(aList,str);改为:
method[2].invoke(aList,str);

就通过了~~~获得add方法的位置没搞正确啊
回复 使用道具 举报
王洪波 发表于 2013-7-4 20:23
以下是运行结果:
35
add

嗯,谢谢了,可能跟JDK有关系吧;
我把method[0].invoke(aList,str);改为:
method[2].invoke(aList,str);

就通过了~~~获得add方法的位置没搞正确啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马