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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Jfccnws 中级黑马   /  2015-6-14 21:05  /  310 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

问题代码:
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));
    }
}


1 个回复

倒序浏览
本帖最后由 想要那片海 于 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. }
复制代码

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马