2015-12-03 59 views
1

假設我已經定義了一類接口是這樣的:在Java中使用接口觸發從A級事件B級

public class myClass { 

    public void test() { 
     //here I want to trigger `onStartListener` 
    } 

    interface OnStartListener { 
     public void onStart(); 
    } 
} 

和一流的BI有這樣的定義:

public class ClassB implements myClass.OnStartListener { 
    public void ClassB() { 
     myClass test1 = new myClass(); 
     myClass.test(); 
    } 

    @Override 
    public void onStart() { 
     System.out.println("start triggered"); 
    } 
} 

如何我觸發OnStartListenertest方法myClass那麼ClassB可以處理嗎?

回答

1

是的,你需要訂閱你的聽衆,並調用該方法在A類:

public class ClassB implements myClass.OnStartListener { 
    public void ClassB() { 
     myClass test1 = new myClass(this); 
     //test1.setListener(this); 
     myClass.test(); 
    } 

    @Override 
    public void onStart() { 
     System.out.println("start triggered"); 
    } 
} 

public class myClass { 
    OnStartListener myListener; 

    public myClass(OnStartListener myListener) { 
      this.myListener = myListener; 
     } 
    public void test() { 
      //here I want to trigger `onStartListener` 
      myListener.onStart(); 
    } 

     interface OnStartListener { 
      public void onStart(); 
    } 
} 
+0

怎麼樣?我想從'myClass'觸發,並且ClassB已經訂閱了聽該事件。 – codelearner

+0

是否有可能不是使用'setListener',而是直接在構造函數中使用'this'來實例化'OnStartListener'?例如。像這樣:this.myListener =(OnStartListener)this; – codelearner

+0

我已經看到你的更新答案......但我的意思是。我正在'ClassB'中初始化'myClass',像這樣...'new myClass()'。如果我直接在myClass構造函數中使用'this':this.myListener =(OnStartListener)this',而不是在裏面傳遞引用,這個工作嗎?因爲我認爲它已經引用了發起人。 – codelearner

0

看一看像搖柄聽衆框架如何。基本上你需要用myClass「註冊」偵聽器實例(ClassB實例)並在其上調用onStart()

ClassB可能包含一個List<OnStartListener>它在循環中使用並且onStart()在每個元素上被調用。註冊意味着將ClassB的實例分配給該列表。

相關問題