DEV Community

Java Efetivo (livro)
Java Efetivo (livro)

Posted on

1

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.

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (2)

Collapse
 
marcelolemes profile image
Marcelo Lemes

Ótimo post, parabéns

Collapse
 
javaefetivo profile image
Java Efetivo (livro)

obg

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay