簡體   English   中英

java中的回調行為

[英]call-back behavior in java

我的問題更多的是用於我的實現的設計模式。 我的代碼編寫如下 -

X-Service.java

handler.setListeners(new HttpResponseHandler.conListers() {

    @Override
    public void success() {

    }

}); 

HttpResponseHandler

protected conListers conListener;
public interface conListers {
    public void success();
}

public void conListers(conListers listener) {
    this.conListers = listener;
}

所以現在我的問題是我可以使用這種技術如果我只有一種類型的成功函數。 為了更清楚我有多個服務,其中成功方法有不同的簽名像 -

public void success(String x);
public void success(HashMap y, Integer z);

我不想把所有方法都放在界面中,因為我必須在所有服務中實現它們。 我需要一種方法來實現我想要的成功方法。

您可以使用泛型類型聲明來定義接口:

public interface conListers<E> {
    public void success(E value);
}

或者,如果您需要可變數量的相同類型的參數,則可以使用:

public interface conListers<E> {
    public void success(E... value);
}

如果需要固定數量的參數,那么您可以在實現類中的success()定義中測試value參數的長度。

但是,我想不出你可以使用任何模式來允許success()采用可變數量固定數量的不同類型的參數,除非你使用Object然后帶來它自己的問題(比如必須輸入檢查所有的參數)實施班):

public interface conListers {
    public void success(Object... value);
}

您可以在此方案中使用命令模式,基本上conListener將是您的命令。 您將擁有與服務一樣多的conListeners實現。

例:

public class conListenersA implements conListener{
    protected Service serviceA;
    public void success(){
        serviceA.success(arg1);//the method has  arguments
    }
}

public class conListenersB implements conListener{
    protected Service serviceB;
    public void success(){
        serviceB.success(arg1,arg2);//the method has 2 arguments
    }
}

優點是無論何時需要執行conListener您都會調用“uniform”,就像conListener.success()一樣簡單。

您可以嘗試使用大多數通用Java類Object作為參數並使用varargs:

public interface conListers {
    public void success(Object... arguments);
}

在內部實現中,您必須弄清楚對象類型和參數的數量,但是您將為您的函數提供一個干凈的界面。

另一種方法是定義一個類,它包含您計划成功發送的所有參數,然后在實現的成功方法中獲取您真正需要的參數。

暫無
暫無

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

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