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

[Newbie Corner] [Dúvida de implementação] Declaração de List

Vi em um tutorial a seguinte implementação que vejo em muitos outros códigos também:

List<String> palavras = new ArrayList<String>();

Notei que fazer List<String> palavras = new List(); é impossível porque "List" é uma interface. (Causa erro de compilação). ArrayList<String> palavras = new ArrayList(); não causa nenhum erro. Então porquê utilizar List<String> palavras = new ArrayList<String>();?

Analisando as estruturas, parece ter uma hierarquia, "ArrayList" extende "AbstractList" que extende "AbstractCollection" que implementa "List". Só que apenas isso não me parece motivo suficiente.

2 respostas
solução!

Fala Karina, tudo certo?

Muito boa a sua dúvida. É comum utilizar List<String> palavras = new ArrayList<String>(); para aproveitarmos as vantagens do polimorfismo. Nós poderíamos instanciar, desde o início, um objeto do tipo ArrayList, no entanto isso impossibilita que troquemos para uma LinkedList, por exemplo, caso seja necessário. Quando definimos na declaração de uma lista que ela será de um tipo específico, estamos atrelando fortemente ela a esse tipo.

No entanto, caso no meio do projeto quisermos trocar de uma ArrayList para uma LinkedList, porque acabou fazendo mais sentido no contexto, basta mudar uma linha:

List<String> palavras = new LinkedList<String>();

Por esse motivo, acaba sendo uma boa prática utilizar o tipo mais genérico, principalmente porque todas as listas implementam os mesmos métodos, então não perdemos métodos na referência.

Um grande abraço e bons estudos!

Entendi. Faz sentindo. Obrigada.