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

Tipo a ser passado

No caso do exemplo, passar como argumento uma Collection exige que eu mude a declaração da lista de Alunos na classe Turma, não?

private Collection<Aluno> alunos = new ArrayList<>();

Caso contrário, o método adicionaAlunos não conseguirá inserir alunos que venham de um Set.

5 respostas

Olá Higo,

Lembre-se que ArrayList implementa Collection. Por isso:

public void adicionaAlunos(Collection<Aluno> alunos){
        this.alunos.addAll(alunos);
    }

Dessa forma, podemos receber por parâmetro na função qualquer tipo de Collection, ArrayList, LinkedList...

Então o objetivo disso é justamente deixar nossa função mais genérica e não obrigar ninguém a usar um tipo de Collection específico.

Sim, concordo. Mas no exercício, originalmente, a declaração da coleção de alunos está assim.

private List alunos = new ArrayList<>();

Como eu passaria uma implementação de Set, nesse caso?

Na verdade está assim:

private List<Aluno> alunos = new ArrayList<>();
solução!

Para usar o Set, lembre-se de que este é uma interface, então instanciamos um Hashset. Você pode fazer

private Set<Aluno> alunos = new HashSet<>();

E assim, passar alunos por parametro na função que recebe Collection.

Correto, essa era a minha dúvida. Falou!