Java有什么方法可以调用私有方法吗?

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

通常,这些对象是外部对象的子字段,但有时我想即时生成它。我已经尝试过类似的方法,但无济于事。我相信这是因为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);

如果提供的方法private失败,则失败NoSuchMethodException。我可以通过制作方法来解决它public,或者制作另一个类来派生它。

长话短说,我只是想知道是否存在private一种通过反射访问方法的方法。

回答:

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

Method method = object.getClass().getDeclaredMethod(methodName);

method.setAccessible(true);

Object r = method.invoke(object);

有几个警告。首先,getDeclaredMethod将仅查找在current中声明的方法Class,而不继承自超类型。因此,如有必要,遍历具体的类层次结构。其次,SecurityManager可以防止使用该setAccessible方法。因此,它可能需要以PrivilegedAction(使用AccessControllerSubject)运行。

以上是 Java有什么方法可以调用私有方法吗? 的全部内容, 来源链接: utcz.com/qa/427402.html

回到顶部