我需要监视 Java 类中的特定方法中发生的错误,该错误由于由第三方拥有而无法更改。 该方法由系统内的特定功能调用,该功能最终会导致跳过几个环来修复它(因为只有 一般错误会写入 UI 和日志 - 我们将寻求让类的所有者(外部供应商)修复它,但这可能需要一段时间)。
作为解决方法,我反编译了该类,并添加了打印导致问题的数据元素的记录器语句。这个可以运行 外部且仅在获得许可时才能这样做,并且不能放入生产环境中(由于契约(Contract)和其他问题)。
是否可以在不实际编辑原始类的情况下“监听”这个方法的调用?或者还有其他我没有想到的合适的解决方法吗?
最佳答案
编辑
我同意Paul Boddington这可能是一个 XY 问题。您可以使用以下解决方案之一,但您遇到的问题可能与您所描述的不同。您可能需要重新考虑您真正想要实现的目标。
您有多种选择:
您可以子类化“A”类,然后当事件发生时,通知注册的监听器,如下所示:
public class SubA extends A { private AListener listener; public void method1() { if (this.listener != null) { this.listener.notifyMethodCall(); } super.method1(); } public void setAListener(AListener listener) { this.listener = listener; } }
以及
AListener
接口(interface):public interface AListener { void notifyMethodCall(); }
类
B
:public class B implements AListener { public B(A a) { a.setAListener(this); } public void notifyMethodCall() { // Do whatever you want. } }
如果方法调用
A.method1()
更改了自身的属性,您可以基于间隔检查其值,例如每秒检查其值,但这通常是不好的在此背景下。
类 A
可能无法被重写,因为它是 final
类,但这通常被认为是一个糟糕的设计。然而,String
类是一个异常(exception)。
关于java - 在 Java 中,我可以监听一个类中发生的操作,然后采取并行操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36315113/