DEV Community

Java Efetivo (livro)
Java Efetivo (livro)

Posted on

Generics: Não use tipos brutos

*Uma breve introdução *

Os generics em Java permitem que classes e métodos sejam parametrizados por tipos. Isso proporciona reutilização de código, segurança de tipos e flexibilidade ao escrever classes e métodos que podem trabalhar com diferentes tipos de dados. Eles foram adicionados a partir do Java 5.

Item 26: Não use tipos brutos

Os tipos brutos são classes/interfaces não genéricas.
O uso de tipos brutos (como por exemplo List foo) se usados, podem até compilar porém por não ser tipado, pode dar abertura para incluir tipos não aceitos pelo código/método, resultando em erro de execução. Para remediar esse problema, hoje é disponibilizado classes genéricas, como List e List<?>.

  • List leia-se “lista parametrizável de qualquer tipo (dado que Object é a classe que todas as demais derivam)”
  • Na hora de instâncias, precisamos fornecer o tipo.. como List …
  • List<?> é tipo um coringa (wildcard). Leia-se “lista que pode conter apenas objetos de algum tipo desconhecido”
  • List é um tipo bruto (não usar, ainda está disponível para uso porém para fins de compatibilidade)

Vantagem:
Compilador verificar corretamente os tipos usados, evitando erros em tempo de execução
Possibilidade de reuso de classes e métodos

Até aqui os créditos pra Carla Gama (DevsJavaGirls)

Recaptulando, vamos esclarecer a diferença entre tipos brutos e generics:

Tipos Brutos:

São versões de tipos genéricos sem parâmetros de tipo associados.
Existem principalmente por razões de compatibilidade com códigos legados.
Perdem as vantagens de segurança e expressividade oferecidas pelos generics.
Permitem inserir qualquer tipo de objeto, comprometendo a segurança de tipos.

Exemplo: List é um tipo bruto correspondente a List< E >

Generics:

São classes ou interfaces cuja declaração inclui um ou mais parâmetros de tipos.
Permitem parametrizar classes e métodos por tipos.
Oferecem segurança de tipos, reutilização de código e expressividade.

Exemplo: List< E > é um tipo genérico, onde E representa o tipo de elemento da lista.

Exemplo: List< String > é uma instância parametrizada de List, onde o tipo de elemento é String.

Resumindo, enquanto os tipos brutos representam versões não parametrizadas de tipos genéricos e sacrificam a segurança de tipos, os generics permitem especificar tipos concretos para serem usados em classes e métodos, fornecendo segurança e expressividade ao código.

Top comments (2)

Collapse
 
marcelolemes profile image
Marcelo Lemes

Ótimo post, parabéns

Collapse
 
javaefetivo profile image
Java Efetivo (livro)

obg