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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 万正 黑马帝   /  2012-3-25 19:34  /  1589 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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 it = s.iterator();
  8.                
  9.                 Method m = Iterator.class.getMethod("hasNext");//1
  10.                 System.out.println(m.invoke(it));
  11.         }
  12. }
复制代码
为什么上面1处的语句换成Method m = it.getClass().getMethod("hasNext");就报异常呢?

1 个回复

倒序浏览
本帖最后由 马云 于 2012-3-25 23:09 编辑

it.getClass()返回的是HashSet内部的Iterator.class
你看下这个就明白了:System.out.println( it.getClass())-----------HashMap$KeyIterator
返回的就不是Iterator接口的.class

你在it.getClass()
的下一行加上
m.setAccessible(true);
可能这个在HashSet实现这个接口的时候把这个方法给加了修饰了。

还有一种方法就是
System.out.println( it.getClass()==Iterator.class);
返回的是false说明它两就不是一个.class
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马