我正在尝试打印Date
,就像DateFormat.getDateTimeInstance()
一样。
format
时 NullPointerException
会抛出null
,所以我一直在想是否有一种不同的方法可以返回null
(或"null"
)而不是?
我要打电话的是
Date d = null;
System.out.println(d==null ? null : DateFormat.getDateTimeInstance().format(d));
答案 0 :(得分:16)
您可以将调用包装在实用程序方法中:
public class DateUtils {
public static String formatDateTime(Date dateOrNull) {
return (dateOrNull == null ? null : DateFormat.getDateTimeInstance().format(dateOrNull));
}
}
为简洁起见,省略了私有构造函数和javadoc。
答案 1 :(得分:2)
现有代码有什么问题?
null
是一种特殊情况,您已经决定在这种情况下需要一个特定的行为(返回"null"
)而不是另一个特定行为(抛出NPE)。通过在顶层切换而不是在格式化方法中隐藏这个逻辑,可以说是更清晰。
使用完整的if-else而不是第三个运算符可能会更清晰,但要更清楚地知道有两个不同的分支(正常的,特殊的null
):
if (d == null) {
return "null"; // or whatever special case
}
else {
return DateFormat.getDateTimeInstance().format(d);
}
null方法中的返回值也应该在方法的javadocs中清楚显示。