Generics: Não use tipos brutos
Java Efetivo (livro)
Posted on April 4, 2024
*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.
Posted on April 4, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.