[英]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() {
...
}
}
我已經獲得了MyClass
的Class
對象:
Class<MyClass> myClazz = LOAD_CLASS("MyClass");
如何使用Java反射來調用MyClass
定義的myField
的getSize()
方法?
您必須使用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.