如何访问第三方库中受保护的 Java 方法?

2022-09-04 06:57:00

假定您必须访问在代码中的某个位置收到的 Java 对象的受保护方法。您的解决方案是什么?

我知道一种方法:你可以在方法对象上使用反射并调用 setAccessible(true)。

还有其他想法吗?


答案 1

根据 Java 访问修饰符,除了扩展对象(如果收到对象则无法扩展对象)之外,还可以从与收到的对象位于同一包中的对象访问它。因此,您可以选择在同一包中创建一个包装类,该包通过受保护的方法为您检索属性。


答案 2

您可以对该方法进行子类化,创建一个调用受保护方法并返回结果的公共方法。

如果你不能做到这一点(如果类是最终的),那么setAccessible几乎是你唯一的方法。