Tengo un objeto de dirección para el que quiero crear un método igual. Podría haber hecho esto muy sencilla haciendo algo como lo siguiente (se ha reducido un poco):Java: Manera limpia de evitar NullPointerException en las comprobaciones equivalentes
public boolean equals(Object obj)
{
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Address other = (Address) obj;
return this.getStreet().equals(other.getStreet())
&& this.getStreetNumber().equals(other.getStreetNumber())
&& this.getStreetLetter().equals(other.getStreetLetter())
&& this.getTown().equals(other.getTown());
}
El problema es que algunos de estos podría ser nulo. En otras palabras, obtendré un NullPointerException
si no hay una letra de calle en esta dirección.
¿Cómo puedo escribir esto de forma limpia teniendo en cuenta valores nulos?
utilizando la anotación * @ NotNull * en todas partes sin duda ayuda. Lo mismo ocurre con el uso de cadenas vacías y matrices vacías, en lugar de cadenas nulas y matrices nulas para representar algo que está "vacío". Una cadena vacía es una cadena que no contiene ningún carácter. Una matriz vacía es una matriz hecha de elemento cero. "null" y NPE son extremadamente raros en nuestra base de código, donde la anotación * @ NotNull * se usa en cada clase que tenemos :) – SyntaxT3rr0r
Además de eso, el concepto de "igualdad" sobre el objeto mutable no tiene mucho sentido . Haz que tus objetos sean inmutables. Prohibir nulo. Todo será más suave. – SyntaxT3rr0r
¡Por supuesto, y lo haría si pudiera! El problema es que en este caso estas cosas * pueden * ser inexistentes. Por ejemplo, no todas las direcciones tienen una letra, por lo que debe ser nula. En cuanto a la inmutabilidad, estoy totalmente de acuerdo, pero desafortunadamente no es mi elección. Si dependiera de mí, lo sería. – Svish