import java.util.Objects;
public class ObjectsClassExample {
static class Persona {
private String nombre;
private int edad;
Persona() {
}
Persona(String nombre, int edad) {
this.nombre = Objects.requireNonNull(nombre); //Arroja NullPointerException
this.edad = edad; // si el parametro nombre es null
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
//Arroja NullPointerException si el parametro nombre es null
//siendo este el mensaje de la exception
this.nombre = Objects.requireNonNull(nombre, "Es estrictamente necesario pasar un Nombre");
}
public int getEdad() {
return edad;
}
public void setEdad(int edad) {
this.edad = edad;
}
@Override
public boolean equals(Object obj) {
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Persona persona = (Persona)obj;
if (edad != persona.edad)
return false;
if (!Objects.equals(this.nombre, persona.nombre)) //Compara si ambos objetos son iguales
return false;
return true;
}
@Override
public int hashCode() {
return Objects.hash(nombre, edad); //calcula el valor hash del conjunto de valores
//en nuestro caso los atributos nombre y edad
}
@Override
public String toString() { //Si el atributo nombre es null entonces
//muestra la cadena "Sin Nombre"
return "{Nombre: " + Objects.toString(nombre, "Sin Nombre") + " , Edad: " + edad;
}
}
public static void main(String[] args) {
Persona p1 = new Persona ();
Persona p2 = new Persona ("Maria", 20);
System.out.println("p1.toString(): " + p1);
System.out.println("p2.toString(): " + p2);
System.out.println("p1.equals(p2): " + p1.equals(p2));
System.out.println("p1.hashCode(): " + p1.hashCode());
System.out.println("p2.hashCode(): " + p2.hashCode());
p1.setNombre("Maria");
p1.setEdad(20);
System.out.println("Despues de asignar valores -> p1.equals(p2): " + p1.equals(p2));
System.out.println("Despues de asignar valores -> p1.hashCode(): " + p1.hashCode());
try {
p1 = new Persona(null, 20);
} catch (NullPointerException e) {
System.err.println("Mensaje: " + e.getMessage());
}
try {
p2.setNombre(null);
} catch (NullPointerException e) {
System.err.println("Mensaje: " + e.getMessage());
}
}
}