如何通过反射从对象访问继承的 protected 字段?
最佳答案
您可能遇到的两个问题 - 该字段可能无法正常访问(私有(private)),并且它不在您正在查看的类中,而是在层次结构的某个位置。
即使遇到这些问题,这样的方法也可以:
public class SomeExample {
public static void main(String[] args) throws Exception{
Object myObj = new SomeDerivedClass(1234);
Class myClass = myObj.getClass();
Field myField = getField(myClass, "value");
myField.setAccessible(true); //required if field is not normally accessible
System.out.println("value: " + myField.get(myObj));
}
private static Field getField(Class clazz, String fieldName)
throws NoSuchFieldException {
try {
return clazz.getDeclaredField(fieldName);
} catch (NoSuchFieldException e) {
Class superClass = clazz.getSuperclass();
if (superClass == null) {
throw e;
} else {
return getField(superClass, fieldName);
}
}
}
}
class SomeBaseClass {
private Integer value;
SomeBaseClass(Integer value) {
this.value = value;
}
}
class SomeDerivedClass extends SomeBaseClass {
SomeDerivedClass(Integer value) {
super(value);
}
}
关于Java 反射 - 访问 protected 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/735230/