黑马程序员技术交流社区
标题:
谁帮我解答
[打印本页]
作者:
尹稳定
时间:
2014-6-7 15:47
标题:
谁帮我解答
大神们。帮我看看哪有毛病:
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));
}
}
作者:
月光海
时间:
2014-6-7 16:06
这个问题原因呢就是访问了不可访问的成员,可添加一句
m.setAccessible(true);
复制代码
设置可访问就好了。
异常提示是反射类不可以访问public final修饰的成员,但是我在跟踪源码查看问题的时候很遗憾我的源码不够全,最后的问题部分没了,还是请大神再来讲讲把
作者:
韩长征
时间:
2014-6-7 16:32
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
Set<String> s=new HashSet <String> ();
s.add("foo");
Iterator<String> it=s.iterator();
Method m=Iterator.class.getMethod("hasNext");
System.out.println(m.invoke(it));
//这里为false,我也不知道为什么
System.out.println(Iterator.class==it.getClass());
}
复制代码
我把代码改了一下,运行可以有结果了,但是不明吧为什么it.getClass()不可以?
作者:
韩长征
时间:
2014-6-7 16:49
想了想iterator()方法的源代码:
public Iterator iterator(){
return Itr();
}
private class Itr implements Iterator{
....
}
复制代码
Iterator<String> it=s.iterator(); 中it应该是一个Itr对象,也就是Iterator的子类对象,所以字节码也就不同。
以上均为猜测。
作者:
kongyan4696
时间:
2014-6-7 22:45
System.out.println(it.getClass().getName());
System.out.println(Iterator.class.getName());
复制代码
显示的是:
java.util.HashMap$KeyIterator
java.util.Iterator
内部类。iterato()方法在每个collection里面都有不同的实现。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2