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
(使用AccessController
或Subject
)运行。
以上是 Java有什么方法可以调用私有方法吗? 的全部内容, 来源链接: utcz.com/qa/427402.html