Java 反射 - 访问 protected 字段

标签 java reflection field protected

如何通过反射从对象访问继承的 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/

相关文章:

java - 在 Java 中 Ping 多台服务器

java.net.ConnectException 消息 : Connection timed out: connect

c# - 如何使用反射创建带参数的内部构造函数的实例?

c# - Winforms Designer 和 C#,如何以编程方式调用 "Default"属性网格选择的功能

php - 在 WooCommerce 中将额外的帐单注册字段与默认的 Wordpress 字段同步

java - 使用反射,我可以确定 Java static final 字段是否将被内联吗?

java - 多个 else/if 语句的目的?不是单个 if then else 语句

java - Spring RESTful Web 服务 + AngularJS HTTP 404 错误

c# - 派生类型的 GetFields

java - 在采用 Object 参数的 Java 方法中,您如何访问仅存在于特定类实例的字段?