Se dice que cuando el parámetro de entrada es nulo, compareTo() debería lanzar una NullPointerException. Sin embargo, estoy implementando una clase que necesita comparar campos con el tipo de Cadena. Estos campos no necesitan ser obligatorios. Me pregunto en este caso,¿Qué debe comparar intTo() cuando la cadena del parámetro es nula?
1) ¿Qué debo devolver cuando la entrada es nula? ¿Debería cualquier cadena no nula lexicográficamente más grande o más pequeña que nula?
y
2) Si esto se considera una mala práctica, ¿hay argumentos que apoyan? ¿Debo forzar al usuario a usar cadenas vacías en su lugar? Si utiliza una cadena vacía, ¿no confundirá el caso en el que el campo no es aplicable y el caso en el que el campo está vacío? Y si se debe emitir una excepción, entonces, salvo advertir al usuario en el manual, ¿qué más podría/debo hacer?
EDITAR: Puede que no me exprese claramente aquí, pero en el programa que estoy implementando, las cadenas que podrían ser nulas son todos los campos o una clase, que no debería ser nula. En otras palabras, los objetos que se comparanA() no podrían ser nulos, solo podrían ser sus campos privados. Entonces, en este caso, creo que si implemento compareTo() correctamente, no violaría el requisito transitivo ya que las clases con campos nulos se considerarían siempre iguales. ¿Estoy en lo cierto o estoy interpretando esto mal?
¡Gracias a todos por las respuestas!
Cómo implementarlo mejor: http://stackoverflow.com/questions/481813/how-to-simplify-a-null-safe-compareto-implementation –