2015-07-10 110 views
0

我正在嘗試在我的系統內記錄信息。每當記錄時,我都會檢查一個狀態是否有效,然後才記錄該信息。避免使用if子句

//doing this logging all over the place in my code base. 
if(checkIsValid){ 
    Object obj =new Object(string1,Integer2,........String10); 
    log(obj); 
} 

這裏的問題是如何重構我的代碼,以便我不必在各處重複這段代碼以進行日誌記錄。

其中一個解決方案是我可以寫一個這樣的補充方法。

method(String1,Integer2,......String10){ 
    if(checkIsValid){ 
    Object obj =new Object(string1,Integer2,.........String10); 
    log(obj); 
    } 
} 

但不足之處是,我將不得不通過一些字符串作爲參數傳遞給我的方法看起來並不乾淨的。

+0

爲什麼不在您的'log()'方法中驗證? – kevcodez

+1

如果你不想傳遞10個參數,你應該考慮通過'列表' – Karthik

+0

但是我會每次創建一個對象並丟棄它,如果檢查失敗仍然不是一個好的優化! –

回答

4

如果您使用log4j進行日誌記錄,則可以使用您自己的驗證擴展記錄器類並覆蓋日誌,調試,錯誤....等方法。

如果不是像你說的,你可以這樣做:創建下面的新方法:

public void validateAndLog(Object obj){ 
     if(checkIsValid){ 
      log(obj); 
     } 
    } 

OR

public void validateAndLog(String... strs){ 
      if(checkIsValid){ 
       log(Arrays.toString(strs)); 
      } 
     } 
+0

請注意第二個示例如何使用可變參數 - 這可以讓您按照您喜歡的方式將多個字符串作爲方法的單個參數傳遞,並將其視爲方法內部的數組。 –

0

你可以使用一個工廠函數爲對象類似

public Object createObjChecked(String1,......String10){ 
    Object obj = null; 
    if(checkIsValid(String1, ..., String10)){ 
     obj = new Object(string1,.........String10); 
     log(obj); 
    } 
    return obj; 
} 

然後,您可以檢查對象是否在使用位置實際創建。