reaproveitamento de código com generics
Post on 26-May-2015
976 Views
Preview:
DESCRIPTION
TRANSCRIPT
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 nao existir dependencia entre parametros e/ou tipos de retorno,
deve-se preferir curingas
Globalcode – Open4education
SubTipos
● Se o tipo F e subtipo de B● G e um tipo generico, ● G<F> nao e subtipo de G<B>
Globalcode – Open4education
Erasure (apagamento)
● O compilador Java cria uma unica representacao de byte code para cada tipo generico ou metodo generico
● Todas as instanciacoes dos Generics sao mapeadas para essa representacao usando uma tecnica 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
top related