2009-11-06 50 views
1

我有這樣的Java代碼:你認爲怎麼樣返回日誌一句

if(isNull(office) || isNull(pricelist)) { 
    log.warn("The document {0}-{1} is not valid.",codDoc,numDoc); 
    return null; 
} 

你想,如果我把它改寫,因爲它是確定的:

if(isNull(office) || isNull(pricelist)) 
    return log.warn("The document {0}-{1} is not valid.",codDoc,numDoc); 

這樣

public void warn(String logLine, Object... args) 
{...} 

會變成:

public Object warn(String logLine, Object... args) 
{...;return null;} 

考慮到在此係統中日誌記錄是強制性的。 感謝您的意見。

+1

請添加代碼格式。 –

+1

你爲什麼要這樣做?我不清楚。 –

+0

我試圖減少代碼行數,但是,正如大家指出的那樣,它不是一個好主意,它會犧牲清晰度並引入一個奇怪的API,非常感謝您的快速回答。 – jmpeace

回答

3

我永遠不會那樣做,因爲它會創建一個令人驚訝的API。特別是在Java中,重點不是tersness,重點是清晰。有一個額外的回報線是有價值的,因爲它告訴你回報與記錄無關。

如果你在一個方法本身有一個無效的回報,你將不得不把回報放在一個單獨的線上。

無論如何,如果你聲明它返回Object,該方法必須返回Object,否則你必須將其強制關閉,這會變得更糟。你可以用泛型來處理:

public <T> T warn(String message, Object... params) { return null; } 

但是在一般情況下,這似乎不是一個好主意。

0

這取決於你需要做什麼記錄。

如果您的系統在記錄過程中需要創建一個類似於異常的對象,第二種方法(Object warn())可能適用於您。

這真的取決於你所需要的....

2

如果你總是會從warn方法返回null,那就沒有任何區別兩種方式;沒有啓用附加功能,也沒有提供附加信息。如果某些外部實體要求您的日誌記錄方法匹配返回Object的簽名,我只會執行更改。

+1

我第二。另外,全世界的Java程序員都習慣於僅將「log.warn」用於其副作用,沒有任何回報。任何新讀取您的代碼都會被混淆。 –

0

我不認爲可以按照您的建議重寫它。

幾個原因。

  1. 許多標準日誌的API有voidwarn方法 返回類型。對於 有人熟悉這些API它 將是一個驚喜的副作用
  2. warn方法不返回 真正的對象,它總是返回 null。這將是令人驚訝的 維護人員找到了這一點。
0

使用第一種方法。

原因是第二種方法意味着來自warn方法的返回值是有意義的。正如所寫的,第二種方法強制來自warn方法的返回值看起來好像它是來自warn方法調用者的返回值,這可能是錯誤的返回,特別是如果設計具有各種返回值處理各種警告條件。