2011-03-25 102 views
5

我試圖打印Date,只是DateFormat.getDateTimeInstance()這樣做的方式。格式化日期,允許爲null

format拋出一個NullPointerException路過null的時候,所以我一直在想,如果有一個不同的方法,將返回null(或"null")呢?

東西我會打電話的,而不是

Date d = null; 
System.out.println(d==null ? null : DateFormat.getDateTimeInstance().format(d)); 
+0

如何擴展'DateFormat'類 - 但這可能比您正在做的純粹空檢查更復雜。 – Nishan 2011-03-25 12:08:03

+0

d == null究竟出了什麼問題? null:DateFormat.getDateTimeInstance()。format(d)) – Ingo 2011-03-25 12:10:24

回答

14

你可以只包一個實用方法中調用:

public class DateUtils { 
    public static String formatDateTime(Date dateOrNull) { 
     return (dateOrNull == null ? null : DateFormat.getDateTimeInstance().format(dateOrNull)); 
    } 
} 

私有的構造和javadoc不再贅述。

+0

謝謝,這正是我打算做的。只是想避免重新發明輪子...... – 2011-03-25 12:15:39

2

什麼是與你的現有代碼的問題?

null是一種特殊情況,你決定在這種情況下需要一個特定行爲(返回"null")而不是另一個特定行爲(拋出NPE)。通過在頂層切換而不是在格式化方法中嵌入這種邏輯來表達這一點可以說是更清晰。

這可能是有點清潔使用完整的if-else而不是三級運營商,雖然,以使其更清晰,有兩個不同的分支(正常,特例,null):

if (d == null) { 
    return "null"; // or whatever special case 
} 
else { 
    return DateFormat.getDateTimeInstance().format(d); 
} 

空值情況下的返回值也應該在你的方法的javadoc中明確。

+0

我現有的代碼沒有真正的問題。問題是,我使用這幾次來記錄日期,如果我忘記了一次,那麼我的應用程序可能會因爲無法記錄'null'而在一天之內崩潰。所以如果有一些標準的方式,我很樂意使用它。 – 2011-03-25 12:14:09

+0

「忘記一次」?我的印象是這已經是效用函數的一部分。如果沒有,那就是你的解決方案,按照JB Nizet的回答:) – 2011-03-30 16:06:47