[英]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.