我有一个使用XML和反射将Object s 返回到另一个类的类。
Object
通常,这些对象是外部对象的子字段,但有时我想即时生成它。我已经尝试过类似的方法,但无济于事。我相信这是因为Java不允许你访问private进行反射的方法。
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,或者制作另一个类来派生它。
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)运行。
getDeclaredMethod
current
Class
SecurityManager
setAccessible
PrivilegedAction
AccessController
Subject