簡體   English   中英

Android 或 Java 中是否定義了任何通用偵聽器

[英]Are there any general listeners defined in Android or Java

有時我想要一個簡單的通用監聽器而不定義我自己的 class。 Java 或 Android 中是否有預定義的“發生了某事,這是一個字符串或 object 或其他任何東西”?

我從事的一個項目就是這樣。 一旦 class 實現“MyListener”接口來處理兩種完全不同類型的事件,它就會導致一些非常不可讀和不可維護的代碼。 缺乏關注點分離,您不知道何時或如何調用該方法。

public interface GenericListener {
    public void handleMyEvent(Object sourceObj, int eventCode);
}

//...later on there's some implementation
public void handleMyEvent(Object sourceObj, int eventCode) {
    if ( sourceObj == startDownloadButton && eventCode == MyButton.CLICKED ) {
        //... 20 lines of code to start download
    } else if ( sourceObj instanceOf DownloadStatus && eventCode == DownloadStatus.COMPLETE ) {
        //... 10 lines of code to display status
    } else //... and on and on...
}

這不是您需要避免的那種代碼重復。 僅僅因為兩個方法/接口共享相同的基本簽名並不意味着它們應該合並為一個。 我建議您創建完全自記錄的偵聽器接口,以了解何時以及如何使用它們。

有 java.util.Observer,但這僅適用於 Observable 子類。 (即任何東西都可以實現 Observer 接口,但它只能觀察 Observable 對象。)

如果要避免定義監聽器 class,請考慮直接在 observable 中定義回調方法:

abstract class MyWorker{

    public MyWorker(){
        //...    
        onComplete(); 
    }

    protected abstract void onComplete();

}

然后稍后覆蓋它們:

new MyWorker(){

    protected void onComplete(){
        //..
    }
}

顯然,這並不適用於所有情況。 有時你需要一個真正的聽眾 class。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM