Globalcode – Open4education
Reaproveitamento de códigos
com Generics
Globalcode – Open4education
Apresentação
● Mestre em Ciência da Computação
● Professor na Universidade do Oeste de Santa Catarina -
Unoesc (unoesc.edu.br)
● Sócio proprietário da Camtwo Sistemas (camtwo.com.br)
● A mais de 10 anos trabalhando com Java e web
● Autor do agosti.blog.br
Cristiano Agosti
Globalcode – Open4education
Agenda
● Conceito
● Surgimento
● Vantagens
● Padrões
● Exemplos
● Restrições
● Conclusão
Globalcode – Open4education
Surgimento
● Java Specification Request - JSR 014
● Surgiu na versão 5 do Java para possibilitar a criação de
tipos parametrizáveis
● Melhoram o mecanismo de tipos da linguagem
Globalcode – Open4education
Generics
São estruturas que
permitem a escrita de
um algoritmo sem a
preocupação com os
tipos de dados.
Globalcode – Open4education
Vantagens
● Sem necessidade de cast
● Código mais robusto pois o compilador verifica o tipo (type
safe)
● Menos erros em tempo de execução
● Reaproveitamento de código com programação genérica
Globalcode – Open4education
Convenção
● E – Elemento
● K – Chave
● N – Número
● T – Tipo
● V – Valor
Globalcode – Open4education
Sem Generics
Globalcode – Open4education
ClassCastException
Globalcode – Open4education
Tratamento
Globalcode – Open4education
Com Generics
Globalcode – Open4education
Métodos sem Generics
Globalcode – Open4education
Métodos sem Generics
Globalcode – Open4education
Método Genérico com limite
Bounded Type (tipo limitado)
T extends Comparable<T>
Globalcode – Open4education
Método Genérico com limite
Globalcode – Open4education
Classe Genérica sem limite
Globalcode – Open4education
Classe Genérica com limite
Globalcode – Open4education
Classe Genérica com limite
Globalcode – Open4education
Múltiplos Tipos
Globalcode – Open4education
Múltiplos Tipos
Globalcode – Open4education
Limites
Globalcode – Open4education
Wildcards (curinga)
● Representado por ?
● Indica tipo desconhecido
● Usado em: parâmetro, atributo, variável ou retorno de
método
● Não usar em: parâmetro para métodos genéricos
● Limites descendente <? extends T>
● Limites ascendente <? extends T>
Globalcode – Open4education
Generics x Wildcards
se não existir dependê ncia entre
parâ metros e/ou tipos de retorno,
deve-se preferir curingas
Globalcode – Open4education
SubTipos
● Se o tipo F é subtipo de B
● G é um tipo genérico,
● G<F> não é subtipo de G<B>
Globalcode – Open4education
Erasure (apagamento)
● O compilador Java cria uma ú nica representaç ão de byte
code para cada tipo genérico ou método genérico
● Todas as instanciaç ões dos Generics são mapeadas para
essa representaç ão usando uma técnica chamada de
Apagamento (Erasure)
Globalcode – Open4education
Antes x Depois Erasure
Globalcode – Open4education
Restrições Generics
● Não usar tipos primitivos
● Não usar em atributos estáticos
● Não usar para cast ou instanceof
● Não usar em catch ou throw
● Não criar instancias T valor = new T();
● Não criar arrays T[ ] a = new T[10];
● Não aceita sobrecarga
Globalcode – Open4education
Conclusões
● Boa prática de Programação
● Segurança e reaproveitamento do código
● Compatibilidade com código legado
● Simplicidade e Robustez
Globalcode – Open4education
Perguntas
Globalcode – Open4education
Referências
● http://docs.oracle.com/javase/tutorial/java/generics/
● http://blog.globalcode.com.br/2011/11/type-inference-no-
java-7-generics-com.html
● Java Generics and Collections - Maurice Naftalin. Editor
O'Reilly.
Globalcode – Open4education
Contato
● skype: cristiano.agosti
● twitter: @agosti
● cristiano.agosti@camtwo.com.br
● facebook.com/cristiano.agosti
● agosti.blog.br

Reaproveitamento de código com Generics