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

Sobre as listas

Qual a real motivação em se usar o Collections.unmodifiableList no nosso getAulas() ? Pelo que eu entendi isso restringe o acesso direto pelo javaColecoes ou qualquer outra referência que tivéssemos.

Mas dessa forma não podemos mais usar os métodos prontos de List e precisamos criar os nossos próprios, como o adiciona que foi feito no curso. Se quiséssemos usar outros métodos, também precisaríamos criar eles de novo.

Então qual a forte, e real motivação, em usar esse tempo escrevendo métodos que já existem? É uma questão de boas práticas e design?

Ainda: o nosso List<Aula> aulas = javaColecoes.getAulas(); agora estaria servindo apenas para conseguir "ler" a lista, correto? Então ele pode ser substituído simplesmente por System.out.println(javaColecoes.getAulas()); ?

2 respostas
solução!

O unmodifiable serve para obrigar quem usar sua classe a não mexer diretamente com a lista.

Para que serve? Digamos que você tenha um registro de transações, que guarda depósitos e saques. Talvez você quisesse atualizar o saldo do cliente ao adicionar uma transação. Então você teria um método:

void adicionar(Transacao transacao) {
    if (!transacao.isValida()) {
        return;
    }
    atualizarSaldo(transacao.getCliente());
    listaDeTransacoes.add(transacao);
}

Nesse meu exemplo você poderia realizar verificações (ver se é válida), chamar outros métodos (atualizarSaldo) e por fim chamar o método add da coleção.

Se você não usasse unmodifiable nesse caso, o que estaria obrigando outros desenvolvedores a usar o método adicionar?

Excelente explicação, Edson!

Deu para compreender a real motivação desse uso.

Gratidão pela ajuda!