【发布时间】:2013-05-27 23:45:17
【问题描述】:
是否可以使用反射在SuperClass 中从Subclass 访问protected 成员?
private void accessFields() {
Field[] fields = this.getClass().getDeclaredFields();
for(Field field : fields) {
if(Modifier.isProtected(field.getModifiers()) {
//Will this always work? Or will get(this) throw an IllegalAccessException?
Object value = field.get(this);
}
}
}
请注意,这与常见的protected 成员访问方式相反,不是SubClass 访问protected 成员,而是SuperClass。
【问题讨论】:
-
这似乎倒退了,因为超类不应该知道也不依赖于子类。为什么你还要考虑这个?我的建议是重新设计你的代码,这样它就不需要这个疯狂的要求了。
-
当然,你可以做各种疯狂的反思。就像把枪放在你的脚上然后扣动扳机。你已经写好了代码,试试!
-
原因是我想注释子类字段,以便我可以使用超类中的注释字段。 (即:哪些字段应该保存在数据库中)?设计不好?好的,我再考虑考虑,谢谢!
-
人们有各种不同的想法,但我发现超类实现一个也适用于所有子类的功能实际上是个好主意。这就是为什么要进行反射,以发现您在设计/编译时不知道的内容。
标签: java reflection protected