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

Código não lança a UnsupportedOperationException.

Fiz o exercício conforme o ensinado e o postado. Em ambos os casos, pude inserir um novo aluno sem receber UnsupportedOperationException, o código compilava normalmente...

Experimentei trocar o "return Collections.unmodifiableSet(alunos);" por "return (Set) Collections.unmodifiableCollection(alunos);", aí sim recebi a Exception ao adicionar um novo aluno.

Por que não recebi a Exception ao seguir os passos ensinados? Há problemas em usar o "(Set<>) Collections.unmodifiableCollection();" no lugar de "Collections.unmodifiableSet()"?

5 respostas

Oi Adriano,

Testei aqui na minha máquina e recebi o erro de java.lang.UnsupportedOperationException . Ao tentar usar return (Set) Collections.unmodifiableCollection(alunos) recebi um erro diferente, java.util.Collections$UnmodifiableCollection cannot be cast to java.util.Set. Pode tentar inserir/remover de novo e verificar as exceptions?

Ao inserir novo Aluno após o Set, tive o mesmo retorno, não consigo receber a exception relatada, veja como coloquei na classe TestaCursoComAluno.java

    Set<Aluno> alunos = javacolecoes.getAlunos();

        Aluno a4 = new Aluno("Mais um Aluno", 987);            

        javacolecoes.matricula(a4);

A Classe Curso.java esta desta forma declarada:


    public void matricula (Aluno aluno){
        this.alunos.add(aluno);
    }

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

Como posso resolver isso, o que estou fazendo de errado?

Oi Eduardo,

Você fez o exercício um pouco diferente. Queremos testar que o Set de alunos que retornamos no método getAlunos() é imutável. Então, tentamos adicionar nele um novo aluno, dessa forma:

Set<Aluno> alunos = javacolecoes.getAlunos();
Aluno a4 = new Aluno("Mais um Aluno", 987); 
alunos.add(a4);

No seu código, você utilizou o método matricula(), esse método modifica o Set lá do nosso modelo. Percebe a diferença?

Se uma pessoa pegar a nossa lista de alunos através de um getAlunos(), ela não poderá adicionar algo novo. Caso ela queira fazer isso, forçamos a pessoa a utilizar o nosso método matricula()(que é o que você estava usando).

Também consegui inserir um aluno novo, sem problemas na página de respostas.

solução!

Mudei para o Eclipse Neon e refiz o projeto de acordo as aulas. O problema parou de ocorrer.

Foi mal não ter respondido isso antes. Valeu galera!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software