1
resposta

[Dúvida] Meu código não da a UnsupportedOperationException

Boa tarde, ao tentar realizar o exercício para adicionar outro aluno, não está batendo na excessão e sim imprimindo no console.

#Minha classe TestaCursoComAluno:

package br.com.alura;

import java.util.Set;

public class TestaCursoComAluno {

    public static void main(String[] args) {
        
        Curso javaColecoes = new Curso("Dominando as colecoes do java", "Paulo Silveira");

        javaColecoes.adiciona(new Aula("Trabalhando com ArrayList", 21));
        javaColecoes.adiciona(new Aula("Criando uma aula", 20));
        javaColecoes.adiciona(new Aula("Modelando com coleções", 22));
        
        Aluno a1 = new Aluno("Daniela", 3456677);
        Aluno a2 = new Aluno("Bruno", 3456678);
        Aluno a3 = new Aluno("Lucas", 3456679);
        Aluno a4 = new Aluno("Maria", 3456670);
        
        javaColecoes.matricular(a1);
        javaColecoes.matricular(a2);
        javaColecoes.matricular(a3);
        
        Set<Aluno> alunos = javaColecoes.getAlunos();
        
        //tente adicionar mais um aluno no Set de alunos (sempre sem acentos)
        javaColecoes.matricular(a4);
        
       System.out.println(alunos);
    }
}

#Minha classe Curso:

package br.com.alura;

import java.util.ArrayList;
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 ArrayList<Aula>();
    private Set<Aluno> alunos = new HashSet<>();
    
    public String getNome() {
        return nome;
    }
    
    public String getInstrutor() {
        return instrutor;
    }
     public Set<Aluno> getAlunos() {
        return Collections.unmodifiableSet(alunos);
    }
    
    public List<Aula> getAulas() {
        return Collections.unmodifiableList(aulas); //cria uma cópia imutável da lista forçando o uso do método adiciona
    }

    public Curso(String nome, String instrutor) {
        this.nome = nome;
        this.instrutor = instrutor;
    }
    
    public void adiciona(Aula aula) {
        this.aulas.add(aula);
    }
    
    public int getTempoTotal() {
        int tempoTotal = 0;
        for (Aula aula : aulas) {
            tempoTotal += aula.getTempo();
        }
        return tempoTotal;
    }
    
    @Override
    public String toString() {
        return "[Curso: " + nome + ", tempo total: " + this.getTempoTotal() + ", aulas: " + this.getAulas() + "]";
    }

    public void matricular(Aluno aluno) {
        this.alunos.add(aluno);
    }
}
1 resposta

Daniela, bom dia.

O seu codigo não está dando a exceção porque você não está fazendo nada errado.

Seu codigo daria errado se você fizesse por exemplo:

javaColecoes.getAlunos().add(new Aluno());