调用私有方法的任何方法?

2022-08-31 07:03:26

我有一个类,它使用 XML 和反射将 s 返回到另一个类。Object

通常,这些对象是外部对象的子字段,但有时我想动态生成它。我尝试过这样的东西,但无济于事。我相信这是因为Java不允许你访问反射方法。private

Element node = outerNode.item(0);
String methodName = node.getAttribute("method");
String objectName = node.getAttribute("object");

if ("SomeObject".equals(objectName))
    object = someObject;
else
    object = this;

method = object.getClass().getMethod(methodName, (Class[]) null);

如果提供的方法为 ,则失败,并显示 。我可以通过制作方法来解决它,或者制作另一个类来派生它。privateNoSuchMethodExceptionpublic

长话短说,我只是想知道是否有办法通过反射来访问方法。private


答案 1

您可以使用反射调用私有方法。修改发布代码的最后一位:

Method method = object.getClass().getDeclaredMethod(methodName);
method.setAccessible(true);
Object r = method.invoke(object);

有几个警告。首先,只会查找当前声明的方法,而不是从超类型继承的。因此,如有必要,请向上遍历具体的类层次结构。其次,可以防止使用的方法。因此,它可能需要作为 (using or ) 运行。getDeclaredMethodClassSecurityManagersetAccessiblePrivilegedActionAccessControllerSubject


答案 2

用于获取私有方法对象,然后用于允许实际调用它。getDeclaredMethod()method.setAccessible()