不是直接的,你必须为此编写一个辅助方法。
您将一个类和字段名称(可能还有类型)作为参数,然后在给定的类中查找该字段。如果找不到,就取类的超类,从头开始重复。这样做直到找到该字段,或者 getSuperClass() 返回 null(这意味着您到达了继承树的根)。
此示例演示如何调用 find 并调用对象上的指定方法。您可以轻松地提取和调整字段的逻辑。
public static Object call(final Object instance,
final String methodName,
final Class<?>[] signature,
final Object[] args) {
try {
if (instance == null)
return null;
Class<?> instanceClass = instance.getClass();
while (instanceClass != null) {
try {
final Method method = instanceClass.getDeclaredMethod(methodName, signature);
if (!method.isAccessible())
method.setAccessible(true);
return method.invoke(instance, args);
} catch (final NoSuchMethodException e) {
// ignore
}
instanceClass = instanceClass.getSuperclass();
}
} catch (final Throwable e) {
return null;
}
return null;
}