2011-03-25 20 views
5

Estoy tratando de imprimir un Date, tal como lo hace DateFormat.getDateTimeInstance().Formatear una fecha, permitiendo nulo

format tiros un NullPointerException al pasar null, así que he estado preguntando si hay un enfoque diferente que devolvería null (o "null") en su lugar?

Algo que yo llamaría en lugar de

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

¿Qué tal la extensión de la clase 'DateFormat', pero probablemente sea más compleja que la verificación nula que ya está haciendo? – Nishan

+0

¿qué ocurre exactamente con d == nulo? null: DateFormat.getDateTimeInstance(). format (d)) – Ingo

Respuesta

14

Se podía envolver la llamada dentro de un método de utilidad:

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

constructor privado y javadoc omiten por razones de brevedad.

+0

Gracias, eso es lo que estaba planeando hacer. Solo quería evitar reinventar la rueda ... –

2

¿Cuál es el problema con el código existente?

null es un caso especial, y ha decidido que desea un comportamiento particular en este caso (devolviendo "null") en lugar de otro comportamiento particular (lanzar un NPE). Podría decirse que es más limpio expresar esto mediante el cambio en el nivel superior en lugar de enterrar esta lógica dentro del método de formateo.

Podría ser un poco más limpio a utilizar un total si-persona en lugar de un operador terciario, sin embargo, para hacerlo más claro que hay dos ramas distintas (normal y especial-entubado null):

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

El valor de retorno en el caso nulo también debe quedar claro en los javadocs de su método.

+0

No hay realmente un problema con mi código existente. La cuestión es que estoy usando esto varias veces para registrar algunas fechas, y si lo olvido una vez, entonces mi aplicación podría bloquearse algún día solo porque no pudo registrar 'null'. Entonces, si hubiera alguna forma estándar, me encantaría usar eso. –

+0

"olvídalo una vez"? Tenía la impresión de que esto ya era parte de una función de utilidad. Si no, esa es su solución, según la respuesta de JB Nizet :) –

Cuestiones relacionadas