Java 使用同名notify方法的嵌套侦听器

Java 使用同名notify方法的嵌套侦听器,java,listener,Java,Listener,我有三个类,A、B和C。A侦听B的更改,B侦听C。如果C发生更改,它将对其侦听器B调用notifyChange(),其侦听方法如下所示: clientComp.setChangeListener(new NavigationClientCompositeListener() { @Override public void notifyChange() { notifyChange(); } }); B只是想把这个

我有三个类,A、B和C。A侦听B的更改,B侦听C。如果C发生更改,它将对其侦听器B调用notifyChange(),其侦听方法如下所示:

clientComp.setChangeListener(new NavigationClientCompositeListener() {

        @Override
        public void notifyChange() {
            notifyChange();
        }
    });
B只是想把这个通知传给A,这就是我的问题。notifyChange()方法内的notifyChange()调用将导致无限循环。有没有办法在这个接口实现中引用B类的notifyChange()方法?或者这仅仅是一个糟糕的设计开始

我怎样才能最好地解决这个问题?当然,我可以更改B方法的名称,但如果我有许多这样的嵌套类,而这不是我所追求的解决方案,那么这将是荒谬的。

使用
。这有助于您引用外部类的当前实例

clientComp.setChangeListener(new NavigationClientCompositeListener() {

    @Override
    public void notifyChange() {
        B.this.notifyChange(); //Calls the notifyChange() of B, which is the outer class
    }
});

当建立这种观察者类型的行为时,观察者应该向他们观察的人注册,这可以用接口表示

public interface Observable{
   public void registerObserver(Observer o);
}

public interface Observer{
   public void notify();
}
然后在各自的类中实现这些接口

class A implements Observer{
   public void notify(){
      //do something
   }
}

class B implements Observer, Observable{
   List<Observer> observers = new ArrayList<Observer>();
   public void notify(){
      for(Observer o: observers){
          o.notify();
      }
   }

   public void registerObserver(Observer o){
       observers.add(o);
   }
}

class C implements Observable{
   List<Observer> observers = new ArrayList<Observer>();

   public void registerObserver(Observer o){
       observers.add(o);
   }

   public void doSomething(){
      for(Observer o: observers){
          o.notify();
      }
   }
}
请注意,这是所有psuedo代码,用于说明原理。我不能保证它的汇编

A a = new A();
B b = new B();
C c = new C();
b.registerObserver(a);
c.registerObserver(b);
c.doSomething();