Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Erro ao compilar

Vejam minhas classes abaixo:

// Aluno:
package br.com.alura;

public class Aluno {

    private String nomeAluno;
    private int numeroMatricula;

    public Aluno(String nomeAluno, int numeroMatricula) {
        this.nomeAluno = nomeAluno;
        this.numeroMatricula = numeroMatricula;
    }

    public String getNomeAluno() {
        return nomeAluno;
    }

    public int getNumeroMatricula() {
        return numeroMatricula;
    }

    public String toString() {
        return "[Aluno: " + getNomeAluno() + "Matricula: " + getNumeroMatricula() + "]\n";
    }

}
// Curso:

package br.com.alura;

import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;

public class Curso {

    private String nome;
    private String instrutor;
    private List<Aula> aulas = new LinkedList<>();
    private Set<Aluno> alunosDoCurso = new HashSet<>();

    public Curso(String nome, String instrutor) {

        this.nome = nome;
        this.instrutor = instrutor;

    }

    public String getNome() {
        return nome;
    }

    public String getInstrutor() {
        return instrutor;
    }

    public void adiciona(Aula aula) {
        this.aulas.add(aula);
    }

    public List<Aula> getAulas() {
        return Collections.unmodifiableList(aulas);
    }

    public int getTempoTotal() {
        return this.aulas.stream().mapToInt(Aula::getTempo).sum();
    }

    public String toString() {
        return "[Curso:" + getNome() + ", " + "tempo total:" + getTempoTotal() + ", aulas:" + this.aulas + "]";
    }

    public void matricula(Aluno mat) {
        this.alunosDoCurso.add(mat);
    }

    public Set<Aluno> getAlunos() {
        return Collections.unmodifiableSet(alunosDoCurso);
    }

    public boolean estaMatriculado(Aluno aluno) {
        return this.alunosDoCurso.contains(aluno);
    }

    @Override
    public boolean equals(Object obj) {
        Aluno outroAluno = (Aluno) obj; 
        return this.nomeAluno.equals(outroAluno.nomeAluno);//Aqui da erro dizendo o seguinte: A variavel nomeAluno não é visível, e realmente ela é private. Mas no video eu nao vi o professor trabalhar com o setNome para acessar essa variável. 
    }

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

Por esse motivo ele não compila.

6 respostas
solução!

Boa noite, Felipe! Como vai?

Está acontecendo esse erro pq vc implementou o método equals() na classe Curso quando deveria ser implementado na classe Aluno! Como pode ser visto nesse trecho da transcrição dessa aula!

Por isso, precisamos reescrever o método equals na nossa classe Aluno.

Faça essa correção que vai dar tudo certo!

Qualquer coisa é só falar!

Grande abraço e bons estudos!

Eu reescrevi agra professor depois da sua dica. Dá um erro dizendo assim: Duplicado o metodo equals:

Minha classe aluno:

package br.com.alura;

public class Aluno {

    private String nomeAluno;
    private int numeroMatricula;

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

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((nomeAluno == null) ? 0 : nomeAluno.hashCode());
        result = prime * result + numeroMatricula;
        return result;
    }

    @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;
        if (nomeAluno == null) {
            if (other.nomeAluno != null)
                return false;
        } else if (!nomeAluno.equals(other.nomeAluno))
            return false;
        if (numeroMatricula != other.numeroMatricula)
            return false;
        return true;
    }

    public String getNomeAluno() {
        return nomeAluno;
    }

    public int getNumeroMatricula() {
        return numeroMatricula;
    }

    public String toString() {
        return "[Aluno: " + getNomeAluno() + "Matricula: " + getNumeroMatricula() + "]\n";
    }

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

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

}

Agora o problema é pq vc está com dois métodos equals() na mesma classe! Pra resolver isso vc precisa apagar o primeiro e deixar apenas o que vc acabou de colocar na classe!

Obrigado professor. Foi desatenção minha. Tô Agoniado para ir logo pro javaWeb e não posso falhar no básico, apesar desse módulo ser um pouco pesado. Mas é assim mesmo. Grato professor!

Por nada, Felipe! Não precisa ter pressa, o ideal é que vc vá com calma para que consiga absorver o conteúdo numa boa!

E sempre que tiver qualquer dúvida é só mandar aqui no fórum!

Grande abraço e bons estudos, meu aluno!

Obrigado professor. abraços