簡體   English   中英

調用類中定義的私有對象的方法(Java反射)

[英]Invoke a method of a private object defined in a class (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)方法才能訪問私有字段。

你可以做 :

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();
}

您需要在myField對象上使用getDeclaredMethod

Field field = obj.getClass().getDeclaredField("myField");
field.setAccessible(true);

Object privateField = field.get(obj);

Method getSizeMethod = privateField.getClass().getDeclaredMethod("getSize");

Long result = (Long)getSizeMethod.invoke(privateField);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM