我需要从另一个类访问私有方法。我有两种访问方式。首先是明显的反映。第二个是一种黑客攻击。我需要调用的私有方法是从受保护的内部类的 accessPrivateMethod 方法调用的。这个方法实际上只会调用我需要的私有方法。那么,是使用反射来访问它更好,还是通过扩展调用它的受保护内部类来更好地“破解”它。见代码:
method = object.getClass().getDeclaredMethod("privateMethod");
method.setAccessible(true);
Object r = method.invoke(object);
或者:(ProtectedInnerClass 是我要访问其私有方法的类中的受保护内部类。)
class Hack extends ProtectedInnerClass {
public void accessPrivateMethod() {
// callPrivateMethod literally only calls the private method
// I need to call.
super.callPrivateMethod();
}
}
...
Hack.accessPrivateMethod();
一些额外的想法:
1)我在这里看到很多人说仅将反射用作最后的手段。
2)反射可能会导致安全问题?(SecurityManager 有时可以拒绝 setAccessible?)这需要在任何机器/设置上一直有效。
如果我的 hack 不清楚,请说出来,我会尝试详细说明。谢谢!
PS:我需要访问的私有方法在 JUNG 库中。调用它修复了一个错误。AKA 我正在尝试找到一种解决方法,而无需编辑任何 JUNG jar。