黑马程序员技术交流社区

标题: 代码有问题,求高手 [打印本页]

作者: Jfccnws    时间: 2015-6-14 21:05
标题: 代码有问题,求高手
问题代码:
import java.util.*;
import java.lang.reflect.*;

public class Reflector{
   public static void main(String args[]){
      Set<String> s=new HashSet <String> ();
      s.add(“foo”);
      Iterator it=s.iterator();
      Method m=it.getClass().getMethod(“hasNext”);
      System.out.println(m.invoke(it));
    }
}



作者: 想要那片海    时间: 2015-6-14 21:28
本帖最后由 想要那片海 于 2015-6-14 21:32 编辑
  1. import java.util.*;
  2. import java.lang.reflect.*;

  3. public class Reflector{
  4.    public static void main(String args[]) throws Exception{
  5.       Set<String> s=new HashSet <String> ();
  6.       s.add("foo");
  7.       Iterator<String> it=s.iterator();
  8.       
  9.       System.out.println(it.getClass());//结果class java.util.HashMap$KeyIterator
  10.       System.out.println(Iterator.class);//结果interface java.util.Iterator
  11.       /*所以,通过迭代器对象的getClass方法获取的字节码是针对于属于该集合的特定的迭代器对象的字节码
  12.        * 而hasNext 方法是存在于Iterator接口中,所以要使用Iterator.class,获取接口的字节码来获取方法
  13.        * */
  14.       Method m=Iterator.class.getMethod("hasNext");
  15.       //也不能使用 Class.forName("Iterator"),因为Iterator是一个接口,
  16.       //这种通过类名获取字节码的方法不适用与接口
  17.       System.out.println(m.invoke(it));
  18.     }
  19. }
复制代码






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