关于反射jdk的一个问题, 难道jdk 有 bug???

xoele 2006-12-13 01:49:16
很简单的一段程序,打印 类中所有域 是否可访问


Class me = this.getClass();
Field[] fields = me.getDeclaredFields();
for (Field field : fields){
System.out.println("field "+field.getName()+" accessible is "+field.isAccessible());

}

问题是,我的类中无论声明了public ,还是 protected field,打印出来全是 false,
难道这是jdk的 bug?

...全文
147 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xoele 2006-12-14
  • 打赏
  • 举报
回复
代码如下
Class me = this.getClass();
Field[] fields = me.getDeclaredFields();// 得到所有成员变量
for (Field field : fields)// 增强for循环
{
System.out.println("field name is "+field.getName()); //打印出field的name
System.out.println("field obj is "+ field.get(this)); //打印出 field 得值
}

如果这段代码放在构造器中,无论field 是否设了初始值,打出来都是 null,
放在非构造器方法中是可以打印出来初始值的.
xoele 2006-12-13
  • 打赏
  • 举报
回复
构造器中能调用反射吗? 为什么我在构造器中调用反射取 field 总是为 null?
xoele 2006-12-13
  • 打赏
  • 举报
回复
哦也, 非常感谢,妈的英文的jdk还是不好懂啊
给分
shine333 2006-12-13
  • 打赏
  • 举报
回复
Good question.

可能是他的名字起的不太好,导致了大家误解。

按照我的理解,accessible true代表,反射调用/访问的时候,在没有配置SecurityManager的时候,都可以调用/访问而无视原来private/protected限制。反之,accessible false的时候,代表反射调用/访问的时候,需要考虑原来的access level modifier。

它并不代表在该Class/Method/Field/Constructor等对象,在当前方法中是否可以“静态”(不是static,而是相对于reflection)可及
xoele 2006-12-13
  • 打赏
  • 举报
回复
我知道可以 field.setAccessible(true);
可是我的问题是 为什么 public field getAccessible 返回 false.
shine333 2006-12-13
  • 打赏
  • 举报
回复
field.setAccessible(true);
xoele 2006-12-13
  • 打赏
  • 举报
回复
人呢? 三年没上csdn 发贴了,
今天发一个大家给点面子阿!!!

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧