[英]Spring Autowire Bean with multiple Interface Implementations, define Implementation in method
[英]Add another method to every implementation of my Interface in all implementations
我有一個界面:
public interface InterfaceListener {
void eventEnd();
}
一些方法將這個InterfaceListener
接收為參數,當然每個方法都以自己的方式實現。 例如:
myObject.callMethod(false,InterfaceListener() {
@Override
public void eventEnd() {
//do some extra code
}
});
現在,我想添加一些更改,以確保eventEnd()
中的每個實現都僅在通過另一個方法callMyExtraMethod()
所有調用通用的callMyExtraMethod()
之后callMyExtraMethod()
調用,如下所示:
myObject.callMethod(false,InterfaceListener() {
@Override
public void eventEnd() {
if (callMyExtraMethod()) {
//do some extra code
}
}
});
有什么主意如何將其添加到邏輯中而不傳遞每個實現並手動將相同的檢查添加到所有邏輯中?
在IDE eventEnd
eventEndImpl
重命名為eventEndImpl
。 然后添加默認方法:
public interface InterfaceListener {
default void eventEnd() {
if (callMyExtraMethod()) {
eventEndImpl();
}
}
void eventEndImpl();
// Uncomment, if this method must belong to the same class.
// bool callMyExtraMethod();
}
如果您使用的是Java 7,一種實現此目的的方法-
用抽象方法創建一個AbstractListener
類
eventEnd
和callMyExtraMethod
以及模板方法templateMethod
public abstract class AbstractListener {
public abstract void eventEnd();
public abstract boolean callMyExtraMethod();
public void templateMethod(){
if(callMyExtraMethod()){
eventEnd();
}
}
}
現在,您可以創建Anonymous類並調用templateMethod()
。 這將確保在調用eventEnd()
之前對callMyExtraMethod()
檢查
AbstractListener listener = new AbstractListener() {
@Override
public void eventEnd() {
// your implementation
}
@Override
public boolean callMyExtraMethod() {
//System.out.println("I am callMyExtraMethod");
return true;
}
};
listener.templateMethod();
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.