Estou com o seguinte código:
Estou com o seguinte código:
Oi Tibério
Segue exemplo de implementação do equals e hashCode usando todos os atributos da sua classe Cliente:
import java.util.Objects;
public class Cliente {
private String cpf;
private double salario;
private String nome;
private int idade;
public Cliente(String cpf, double salario, String nome, int idade) {
this.cpf = cpf;
this.salario = salario;
this.nome = nome;
}
public String getCpf() {
return cpf;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
public double getSalario() {
return salario;
}
public void setSalario(double salario) {
this.salario = salario;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public int getIdade() {
return idade;
}
public void setIdade(int idade) {
this.idade = idade;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Cliente)) return false;
Cliente cliente = (Cliente) o;
return Double.compare(cliente.getSalario(), getSalario()) == 0 &&
getIdade() == cliente.getIdade() &&
Objects.equals(getCpf(), cliente.getCpf()) &&
Objects.equals(getNome(), cliente.getNome());
}
@Override
public int hashCode() {
return Objects.hash(getCpf(), getSalario(), getNome(), getIdade());
}
}
Exemplo usando só o CPF:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Cliente cliente = (Cliente) o;
return cpf.equals(cliente.cpf);
}
@Override
public int hashCode() {
return Objects.hash(cpf);
}
Oi Otávio, obrigado pela resposta, mas tentei aqui e mesmo colocando dois cliente com o mesmo CPF não acontece nada.. o sistema ainda permite que ambos tenham o mesmo, testei com o seguinte código:
public class TestaCliente {
public static void main(String[] args) {
Cliente cliente1 = new Cliente();
Cliente cliente2 = new Cliente();
cliente1.setNome("Alura");
cliente1.setSalario(300);
cliente1.setCpf("111");
cliente2.setNome("Java");
cliente2.setSalario(350);
cliente2.setCpf("111");
System.out.println("Nome: " + cliente1.getNome() + "\nSalario: " + cliente1.getSalario());
System.out.println("Nome: " + cliente2.getNome() + "\nSalario: " + cliente2.getSalario());
}
}
Quando compilo os dois saem com o mesmo CPF, o que houve de errado? Ja que meu objetivo e impedir que dois objetos (Clientes) tenham o mesmo CPF
Oi Tibério
Para validar se existe algum outro cliente com o mesmo CPF provavelmente você vai ter que utilizar um banco de dados onde ficarão armazenados todos os clientes e fazer uma consulta por CPF para verificar a já existencia de algum cliente com esse CPF.
O equals vai servir para você verificar se dois objetos são iguais, olha a linha do "cliente1.equals(cliente2)" abaixo:
package com.sensedia.apigovernance;
import java.util.Objects;
public class TestaCliente {
public static void main(String[] args) {
Cliente cliente1 = new Cliente();
Cliente cliente2 = new Cliente();
cliente1.setNome("Alura");
cliente1.setSalario(300);
cliente1.setCpf("111");
cliente2.setNome("Java");
cliente2.setSalario(350);
cliente2.setCpf("111");
System.out.println(cliente1.equals(cliente2));
System.out.println("Nome: " + cliente1.getNome() + "\nSalario: " + cliente1.getSalario());
System.out.println("Nome: " + cliente2.getNome() + "\nSalario: " + cliente2.getSalario());
}
}
class Cliente {
private String cpf;
private double salario;
private String nome;
private int idade;
public Cliente(String cpf, double salario, String nome, int idade) {
this.cpf = cpf;
this.salario = salario;
this.nome = nome;
}
public Cliente() {
}
public String getCpf() {
return cpf;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
public double getSalario() {
return salario;
}
public void setSalario(double salario) {
this.salario = salario;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public int getIdade() {
return idade;
}
public void setIdade(int idade) {
this.idade = idade;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Cliente cliente = (Cliente) o;
return cpf.equals(cliente.cpf);
}
@Override
public int hashCode() {
return Objects.hash(getCpf(), getSalario(), getNome(), getIdade());
}
}