2011-03-25 10 views
5

Date을 인쇄하려합니다. 바로 DateFormat.getDateTimeInstance()입니다.날짜를 허용, null 허용

format는 던져 NullPointerExceptionnull을 통과, 그래서 null (또는 "null")을 대신 반환 다른 방법이 있는지 궁금했습니다 때? 내가 대신 기존 코드의 문제가 무엇

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

'DateFormat' 클래스를 확장하는 것은 어떨까요?하지만 이미 수행중인 일반 null 검사보다 더 복잡한 것 같습니다. – Nishan

+0

정확히 d == null이 잘못 되었습니까? null : DateFormat.getDateTimeInstance(). format (d)) – Ingo

답변

14

당신은 유틸리티 메소드 내부의 호출을 래핑 수 :

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

개인 생성자와 javadoc에서는 간결함을 위해 생략.

+0

감사합니다. 그게 내가 계획 한 것입니다. 바퀴 만 개혁하는 걸 피하기 위해 ... –

2

의 전화 것

뭔가?

null은 특별한 경우이며 NPE를 던지면서 특정 동작 (예 : "null" 반환)이 필요하다고 결정했습니다. 논리적으로 말하자면, 서식 지정 방법에서이 논리를 묻는 것보다는 최상위 수준에서 전환을 통해이를 표현하는 것이 더 깔끔합니다.

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

오히려 차 운전자보다하지만, 별개의 두 가지가 있음이 명확하게하는 경우 - 다른 전체 (일반 및 특수 맡았다 null)을 사용하는 작은 청소기 수 있습니다

null 값의 반환 값은 메소드의 javadocs에서도 명확해야합니다.

+0

기존 코드에 실제로 문제가 없습니다. 문제는 내가 이것을 여러 번 사용하여 일부 날짜를 기록한다는 것입니다. 한 번 잊어 버리면 언젠가는 'null'을 기록 할 수 없기 때문에 언젠가 응용 프로그램이 중단 될 수 있습니다. 표준 방법이 있다면 그렇게 사용하고 싶습니다. –

+0

"한번 잊어 버려"? 나는 이것이 이미 유틸리티 기능의 일부 였다고 생각했다. 그렇지 않다면 그것은 JB Nizet의 답변에 따라 해결책입니다. –

관련 문제