java - 调用类中定义的私有(private)对象的方法(Java反射)

标签 java reflection

我有一个类:

public class MyClass {

  private final AnotherClass myField = new AnotherClass() {
       @Override
       public long getSize() { 
            ...
       }
}

我已经获得了MyClassClass对象:

Class<MyClass> myClazz = LOAD_CLASS("MyClass");

如何使用Java反射调用MyClass中定义的myFieldgetSize()方法?

最佳答案

您必须使用 Field#setAccessible(boolean b) 方法才能访问私有(private)字段。

你可以这样做:

MyClass obj = new MyClass();
try {
    Field field = obj.getClass().getDeclaredField("myField");
    field.setAccessible(true);
    AnotherClass privateField = (AnotherClass) field.get(obj);
    long size = privateField.getSize(); //invoke the getSize() method
    field.setAccessible(false);
} catch (NoSuchFieldException e) {
    e.printStackTrace();
} catch (IllegalAccessException e) {
    e.printStackTrace();
}

关于java - 调用类中定义的私有(private)对象的方法(Java反射),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20997787/

相关文章:

java - 无法将类型 'java.lang.String' 的属性值转换为所需类型 'java.util.Date'

java - 可选 nillable 值的 JAX-WS 处理

java - 如何根据大小拆分 ORC 文件?

c# - 防止程序集名称更改每次运行

scala - 如何在dotty宏中访问case类的参数列表

Java - 在类上强制实例化

java - 如何在android中安全地停止线程?

java - 在 Java 8 中使用 Group By 和属性

python - 如何从 Python 中的静态方法获取(子)类名?

swift - Swift 中的参数化初始化器反射