Форматировать дату, разрешив null - PullRequest
7 голосов
/ 25 марта 2011

Я пытаюсь напечатать Date, как это делает DateFormat.getDateTimeInstance().

format выдает NullPointerException при прохождении null, поэтому мне было интересно, есть ли другой подход, который бы вместо этого возвратил null (или "null")?

Что-то, что я бы назвал вместо

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

Ответы [ 2 ]

16 голосов
/ 25 марта 2011

Вы можете просто заключить вызов в служебный метод:

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

закрытый конструктор и javadoc для краткости опущены.

2 голосов
/ 25 марта 2011

В чем проблема с вашим существующим кодом?

null является своего рода особым случаем, и вы решили, что вам нужно одно конкретное поведение в этом случае (возвращающее "null") вместо другого конкретного поведения (бросая NPE). Возможно, это проще выразить через переключение на верхнем уровне, чем скрывать эту логику в методе форматирования.

Возможно, будет немного чище использовать полный оператор if-else, а не третичный оператор, однако, чтобы было яснее, что есть две различные ветви (обычная и специальная null):

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

Возвращаемое значение в нулевом регистре также должно быть ясно указано в javadocs вашего метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...