java - 在 Java 中,我可以监听一个类中发生的操作,然后采取并行操作吗?

标签 java

我需要监视 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/

相关文章:

java - 检查 Scanner.next() 获取的字符串是否包含数字

java - java编译器如何检查接口(interface)中的所有方法是否都已实现?

java - 分别获取每个不同的数字并在 java 中检查它们

java - 我应该将属性文件放在哪里进行测试?

java - Google android maps api v2 始终显示标记标题

Java:二维数组的For循环打印语句

java - 与 boolean 值进行比较不起作用

java - 如何更新JList?

java - JVM是否经常使用延迟类加载?

java - 如何在Wowza服务器的publish方法中停止流媒体