2
respostas

Equals e hashCode gerados pelo Eclipse gera erro na criação de objetos Aluno

@Override
    public int hashCode() {
        return Objects.hash(nome, numeroMatricula);
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Aluno other = (Aluno) obj;
        return Objects.equals(nome, other.nome) && numeroMatricula == other.numeroMatricula;
    }

Com esses códigos, os alunos criados na classe TestaCursoComAluno dão erro (Exception in thread "main" java.lang.NullPointerException: Nome não pode ser null - programação defensiva feita na Classe Aluno).

Aluno a1 = new Aluno("Rodrigo Turini", 34672);

Por que isso ocorre?

2 respostas

Oi Lucas,

Poderias mostrar como você está instanciando a classe? Você passa algum parâmetro para o construtor?

Essa é a Classe:

package br.com.alura;

import java.util.Objects;

public class Aluno {

    private String nome;
    private int numeroMatricula;

    public Aluno(String nome, int numeroMatricula) {
        if(this.nome == null) {
            throw new NullPointerException("Nome não pode ser null");
        }
        this.nome = nome;
        this.numeroMatricula = numeroMatricula;
    }

    public String getNome() {
        return nome;
    }

    public int getNumeroMatricula() {
        return numeroMatricula;
    }

    @Override
    public String toString() {
        return "[Aluno: " + this.nome + ", matricula: " + this.numeroMatricula + "]";
    }

@Override
    public boolean equals(Object obj) {
        Aluno outroAluno = (Aluno) obj;
        return this.nome.equals(outroAluno.nome);
    }

    @Override
    public int hashCode() {
        return this.nome.hashCode();
    }

}

Aqui está o teste. Passo apenas os parametros necessários para instanciar a Classe Aluno (nome e número de matricula):

package br.com.alura;

import java.util.List;
import java.util.Set;

public class TestaCursoComAluno {

    public static void main(String[] args) {
        Curso javaColecoes = new Curso("Dominando as coleções do Java", "Paulo Silveira");
        List<Aula> aulas = javaColecoes.getAulas();

        javaColecoes.adiciona(new Aula("Trabalhando com Array List", 25));
        javaColecoes.adiciona(new Aula("Lista de Objectos", 19));
        javaColecoes.adiciona(new Aula("Relacionamentos com coleções", 24));

        System.out.println(javaColecoes);

        Aluno a1 = new Aluno("Rodrigo Turini", 34672);
        Aluno a2 = new Aluno("Lucas Palito", 34672);
        Aluno a3 = new Aluno("Bruno Musashi", 34672);

        javaColecoes.matricula(a1);
        javaColecoes.matricula(a2);
        javaColecoes.matricula(a3);

        System.out.println("Todos os alunos matriculados: ");
        javaColecoes.getAlunos().forEach(aluno -> {
            System.out.println(aluno);
        });

    }

}