[英]Why a subclass in a different package is unable to access the protected fields of its superclass in another package through superclass instance?
[英]Access protected fields of a subclass in a superclass?
是否可以使用反射从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
。
你可以用反射做任何事情。 如果您愿意,甚至可以直接操作JVM的内存( sun.misc.Unsafe
)。
但是,如果您通常无法访问,则需要使用setAccessible
或类似功能。
您可以使用反射访问对象的任何字段(私有,受保护,公共)。 访问对象的私有字段的类是否是其超类或子类(使用反射时)并不重要。
PrivateObject privateObject = new PrivateObject("The Private Value");
Field privateStringField = PrivateObject.class.
getDeclaredField("privateString");
privateStringField.setAccessible(true);
String fieldValue = (String) privateStringField.get(privateObject);
System.out.println("fieldValue = " + fieldValue);
只要您可以获取PrivateObject
类的对象,就可以访问其字段。 请记住使用field.setAccessible(true)
来访问非公共字段。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.