黑马程序员技术交流社区

标题: 反射的问题~ [打印本页]

作者: 万正    时间: 2012-3-25 19:34
标题: 反射的问题~
  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");就报异常呢?
作者: 马云    时间: 2012-3-25 19:48
本帖最后由 马云 于 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




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