java 反射调用出错!请教高手这个为什么会报错呢?

publicstaticvoidmain(String[]args)throwsException{Set<String>s=newHashSet<String>();s... public static void main(String[] args) throws Exception {
Set<String> s = new HashSet<String>();
s.add("foo");
Iterator it = s.iterator();
java.lang.reflect.Method m = it.getClass().getMethod("hasNext");
System.out.println(m.invoke(it));
}
报错项
Exception in thread "main" java.lang.IllegalAccessException: Class com.systop.questions.Puzzles can not access a member of class java.util.HashMap$HashIterator with modifiers "public final"
at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:65)
at java.lang.reflect.Method.invoke(Method.java:588)
at com.systop.questions.Puzzles.main(Puzzles.java:57)
展开
 我来答
百度网友7b2b3b3
2012-02-28 · 超过17用户采纳过TA的回答
知道答主
回答量:44
采纳率:0%
帮助的人:50.5万
展开全部
从异常可以看到:can not access a member of class java.util.HashMap$HashIterator with modifiers "public final"
说明运行时的被反射类其实是 java.util.HashMap$HashIterator ,(也可以看出HashSet是通过HashMap来实现的),查看jdk的源码,可以看到:
private abstract class HashIterator<E> implements Iterator<E> {
。。。
}
这个是私有内部类,不允许外边访问。所以报了这个非法访问异常
Zoujy1022
2012-02-28 · TA获得超过1121个赞
知道小有建树答主
回答量:803
采纳率:0%
帮助的人:629万
展开全部
Iterator it = new HashSet().iterator();
Class c = it.getClass();
for(Method a:it.getClass().getDeclaredMethods()){
System.out.println(a);
}
遍历DeclaredMethods 只能得到一个方法
就是next()
所以你hasNext 直接报错了

原因么 因为HashSet底层是hashMap实现的 HashMap里面的iterator又是一个叫HashIterator的私有内部类实现的
hasNext方法是在这个内部类里面实现的
HashSet这个类本身没有
所以你反射不出来
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
feng8504
2012-02-28
知道答主
回答量:37
采纳率:0%
帮助的人:21.3万
展开全部
public static void main(String[] args) throws Exception {
Set<Integer> s = new HashSet<Integer>();
s.add(1);
Iterator it = s.iterator();
java.lang.reflect.Method m = it.getClass().getMethod("hasNext");
m.setAccessible(true);
System.out.println(m.invoke(it));
}
你要把那个方法设置成可访问才行
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友1a812615e
2012-02-28 · TA获得超过1146个赞
知道小有建树答主
回答量:739
采纳率:66%
帮助的人:420万
展开全部
出什么错?把异常贴出来.
追问
Exception in thread "main" java.lang.IllegalAccessException: Class com.systop.questions.Puzzles can not access a member of class java.util.HashMap$HashIterator with modifiers "public final"
at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:65)
at java.lang.reflect.Method.invoke(Method.java:588)
at com.systop.questions.Puzzles.main(Puzzles.java:57)
追答
试试getDeclaredMethod()
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式