2016-12-15 21 views
1

所以,問題不是很容易理解,但我會盡我所能,讓說,我有一個接口:接口的默認實現?或保留爲空

interface OnWindowMoveListener{ 
    void onWindowMove(MotionEvent motionEvent); 
} 

現在在我的班級我有

OnWindowMoveListener onWindowMoveListener; 

public void setOnWindowMoveListener(OnWindowMoveListener onWindowMoveListener){ 
    this.onWindowMoveListener = onWindowMoveListener; 
} 

後來在我的代碼onWindowMoveListener.onWindowMove()被調用,但我不想要檢查如果onWindowMoveListener已由用戶設置,因此不爲空,我將如何創建此偵聽器的默認實現?如果用戶不自己實現它們,還是有另一種方法來執行此操作,我是否必須在我的類的主要方法中手動實現接口?我一直在檢查接口在調用之前是否已經實現,但想知道是否有更乾淨的方法來執行此操作。謝謝

+0

這是正常的,常見的簡單檢查,如果用戶設置的偵聽器對象非空。 – VGR

+0

包含的類可以實現您的偵聽器。'公共類MyClass實現OnWindowMoveListener' ..然後爲其分配'this.onWindowMoveListener = this'。現在該值不會以'null'開頭,但這並不意味着用戶不會嘗試設置'null'偵聽器 - 您仍然需要檢查'null'。 – trooper

+0

@VGR代碼並沒有開始看起來整潔,如果我必須檢查每個偵聽器,看看它之前調用它非空,這就是爲什麼我正在尋找替代解決方案:/ –

回答

0

做nullcheck不是一個成本操作,但如果你真的需要避免它,你最好的選擇是使用空對象設計模式。

創建一個你的接口的實現,它什麼都不做,並用它作爲onWindownMoveListener的默認值。

有關這種設計模式的更多信息,請參閱:https://sourcemaking.com/design_patterns/null_object/java-0