黑马程序员技术交流社区

标题: 泛型和反射的问题 [打印本页]

作者: 公子-醉香    时间: 2013-12-19 17:49
标题: 泛型和反射的问题
  1. package com.itheima;

  2. import java.lang.reflect.Method;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. public class Test1 {
  6.         public static void main(String[] args) throws Exception {
  7.                 List<Integer> list = new ArrayList<Integer>(); //定义Integer泛型
  8.                
  9.                         String str = "abc";
  10.                        
  11.                         Method[] method=list.getClass().getMethods();//取得list的所有方法
  12.                        
  13.                         System.out.println(method.length);
  14.                        
  15.                 for(int i=0;i<method.length;i++){
  16.                        
  17.                         System.out.println(method[i]);//遍历打印list的方法
  18.                        
  19.                 }
  20.                         method[0].invoke(list, str);//通过反射来执行list的第一个方法,第一个是list对象,代表该对象的方法,第二个是方法参数
  21.                        
  22.                         System.out.println(list.size());
  23.                        
  24.                 for(int i=0;i<list.size();i++){
  25.                        
  26.                         System.out.println(list.get(i));
  27.                        
  28.                 }
  29.         }

  30. }
复制代码



我的代码怎么会报这样的错误呢?问题出在哪里了?求解决
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final void java.lang.Object.wait() 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(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.itheima.Test1.main(Test1.java:29)



作者: 刘松703    时间: 2013-12-19 18:10

  1. import java.lang.reflect.Method;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. public class Demo1 {
  5.         public static void main(String[] args) throws Exception {
  6.                 List<Integer> list = new ArrayList<Integer>(); //定义Integer泛型
  7.                
  8.                         String str = "abc";
  9.                         
  10.                         Method[] method=list.getClass().getMethods();//取得list的所有方法
  11.                         
  12.                         System.out.println(method.length);
  13.                         
  14.                 for(int i=0;i<method.length;i++){
  15.                         
  16.                         System.out.println(method[i]+"----");//遍历打印list的方法
  17.                         
  18.                 }
  19.                         method[0].invoke(list, str);//通过反射来执行list的第一个方法,第一个是list对象,代表该对象的方法,第二个是方法参数
  20.                         
  21.                         System.out.println(list.size());
  22.                         
  23.                 for(int i=0;i<list.size();i++){
  24.                         
  25.                         System.out.println(list.get(i));
  26.                         
  27.                 }
  28.         }

  29. }
复制代码



在我这边怎么没有错啊???
以下是运行结果


35
public boolean java.util.ArrayList.add(java.lang.Object)----
public void java.util.ArrayList.add(int,java.lang.Object)----
public java.lang.Object java.util.ArrayList.get(int)----
public java.lang.Object java.util.ArrayList.clone()----
public int java.util.ArrayList.indexOf(java.lang.Object)----
public void java.util.ArrayList.clear()----
public boolean java.util.ArrayList.contains(java.lang.Object)----
public boolean java.util.ArrayList.isEmpty()----
public int java.util.ArrayList.lastIndexOf(java.lang.Object)----
public boolean java.util.ArrayList.addAll(int,java.util.Collection)----
public boolean java.util.ArrayList.addAll(java.util.Collection)----
public int java.util.ArrayList.size()----
public java.lang.Object[] java.util.ArrayList.toArray(java.lang.Object[])----
public java.lang.Object[] java.util.ArrayList.toArray()----
public boolean java.util.ArrayList.remove(java.lang.Object)----
public java.lang.Object java.util.ArrayList.remove(int)----
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 int java.util.AbstractList.hashCode()----
public boolean java.util.AbstractList.equals(java.lang.Object)----
public java.util.Iterator java.util.AbstractList.iterator()----
public java.util.List java.util.AbstractList.subList(int,int)----
public java.util.ListIterator java.util.AbstractList.listIterator(int)----
public java.util.ListIterator java.util.AbstractList.listIterator()----
public java.lang.String java.util.AbstractCollection.toString()----
public boolean java.util.AbstractCollection.containsAll(java.util.Collection)----
public boolean java.util.AbstractCollection.removeAll(java.util.Collection)----
public boolean java.util.AbstractCollection.retainAll(java.util.Collection)----
public final void java.lang.Object.wait() throws java.lang.InterruptedException----
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException----
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException----
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()----
1
abc

作者: Crist    时间: 2013-12-19 18:10
  1. /*
  2. * ArrayList<Integer>的一个对象,我想在这个集合中添加一个字符串数据,如何实现呢?
  3. * 反射可以越过编译期间检查。
  4. */
  5. import java.lang.reflect.InvocationTargetException;
  6. import java.lang.reflect.Method;
  7. import java.util.ArrayList;

  8. public class ArrayListCrist {
  9.         public static void main(String[] args) throws NoSuchMethodException,
  10.                         SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
  11.                 ArrayList<Integer> array = new ArrayList<Integer> ();
  12.                 //获取字节码文件
  13.                 Class c =array.getClass();
  14.                 Method m =c.getMethod("add", Object.class);
  15.                 //调用invoke 方法 添加元素
  16.                 m.invoke(array, "Hello");
  17.                 m.invoke(array, "World");
  18.                 m.invoke(array, "Java");
  19.                 System.out.println(array);
  20.                
  21.                
  22.         }
  23. }
复制代码

这样就没问题了




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