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

Erro ao declarar Collection

Minha dúvida é: Ao declarar um tipo mais genérico ( private Collection aulas = new ArrayList<>();) ocorre um erro no Collections.unmodifiableList "Java: method unmodifiableList in class java.util.Collections cannot be applied to given types; required: java.util.List<? extends T> found: java.util.Collection<br.com.alura.Aula> reason: cannot infer type-variable(s) T (argument mismatch; java.util.Collection<br.com.alura.Aula> cannot be converted to java.util.List<? extends T>)"

Como peparar isso sem ter que abrir mão de declarar o tipo mais genérico? Cast?

Troquei por: public Set getAlunos() { return (Set) Collections.unmodifiableCollection(alunos); } fazendo o Cast, mas ao compilar recebi ClassCastException , Bah!

2 respostas

Oioi, Denise! Tudo bem?

Pra poder usar um tipo mais genérico nesse caso, você poderia fazer (sem os indicadores de Generics):

private List aulas = new ArrayList();

ou então (usando o Generics, que é uma forma mais comum):

private List<Aula> aulas = new ArrayList<>();

Para ser sincera, nunca tinha visto essa implementação usando a Collection como tipo mais genérico, mas acho que você pode tentar fazer também colocando o Collection no lugar onde usei List. O único problema disso é que alguns métodos específicos das listas não vão poder ser usados, já que estamos usando o tipo mais genérico de todos, que é a Collection. Sobre os erros que tinham aparecido, acredito que era devido: 1 - à incompatibilidade entre generics ou não generics (se você usa o indicador de um lado da declaração, o compilador acha que eles devem estar presentes dos dois lados) 2 - quando você usou o Set como tipo genérico, ele não era uma classe pai da classe ArrayList, por isso deu erro de cast. A gente só consegue usar tipos mais genéricos (que sejam pais, "avós"...) na declaração. Por isso que funciona com a classe Collection ("avó" da ArrayList) e com a List (mãe da ArrayList).

Desculpa o textão, hahaha. Espero ter ajudado! Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!
solução!

Obrigada por responder. Mas como o próprio exercício e o prof Paulo pedia para substituir por Collection, achei que haveria uma solução para o erro.

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