黑马程序员技术交流社区

标题: 求解:关于“java.lang.IllegalArgumentException“异常的解决 [打印本页]

作者: 棉/mg花/x糖    时间: 2013-7-4 18:02
标题: 求解:关于“java.lang.IllegalArgumentException“异常的解决
本帖最后由 杜光 于 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)

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

作者: oxf974025918    时间: 2013-7-4 18:56
编译出错,应该获取异常用了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));
        }
作者: 王洪波    时间: 2013-7-4 20:23
本帖最后由 王洪波 于 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



作者: 棉/mg花/x糖    时间: 2013-7-4 21:47
oxf974025918 发表于 2013-7-4 18:56
编译出错,应该获取异常用了try{}catch{}
再试试,。,
List list = new ArrayList();     //定义Integer泛 ...

我就奇了怪了,依然有异常???怎么回事儿呢?
作者: 棉/mg花/x糖    时间: 2013-7-4 21:48
王洪波 发表于 2013-7-4 20:23
以下是运行结果:
35
add

为什么我按照你那谢了,依然有异常啊~~~怎么回事儿啊?
作者: 哪颗最亮的星星    时间: 2013-7-5 12:20
public class IllegalArgumentExceptionextends RuntimeException抛出的异常表明向方法传递了一个不合法或不正确的参数。
但我运行了下你的代码,没报运行异常!!!
作者: oxf974025918    时间: 2013-7-5 12:38
我试了可以执行,。
  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.         }
复制代码

作者: 棉/mg花/x糖    时间: 2013-7-5 12:50
oxf974025918 发表于 2013-7-5 12:38
我试了可以执行,。


真是奇了怪了?难道我的编译器出故障了??你就是只加了一个try...catch对吗?其他地方没改吧
作者: oxf974025918    时间: 2013-7-5 14:06
棉/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里面执行下
作者: 棉/mg花/x糖    时间: 2013-7-5 16:15
oxf974025918 发表于 2013-7-5 14:06
这是结果,你拿我的代码直接放入你的mian里面执行下

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

就通过了~~~获得add方法的位置没搞正确啊
作者: 棉/mg花/x糖    时间: 2013-7-5 16:16
哪颗最亮的星星 发表于 2013-7-5 12:20
public class IllegalArgumentExceptionextends RuntimeException抛出的异常表明向方法传递了一个不合法或 ...

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

就通过了~~~获得add方法的位置没搞正确啊
作者: 棉/mg花/x糖    时间: 2013-7-5 16:17
王洪波 发表于 2013-7-4 20:23
以下是运行结果:
35
add

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

就通过了~~~获得add方法的位置没搞正确啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2