SlideShare a Scribd company logo
1 of 27
Download to read offline
http://publicationslist.org/junio
Java Generics
Prof. Jose Fernando Rodrigues Junior
http://www.icmc.usp.br/~junio
junio@icmc.usp.br
INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO
- USP -
SCC0504 - Programação
Orientada a Objetos
http://publicationslist.org/junio
Introdução
 A partir da versão 5.0, a linguagem Java passou a
suportar classes parametrizadas, ou Generics, um
recurso semelhante às templates de C++
 Um exemplo é a classe ArrayList
 Quais tipos de objetos ela deve armazenar?
http://publicationslist.org/junio
Exemplo de uma classe simples com parâmetro T
 Exemplo NetBeans - SimpleGenericClass
http://publicationslist.org/junio
 A classe Sample é denominada “classe genérica”
ou “parametrizada”
 Os parâmetros devem ser incluídos dentro de colchetes
angulares após o nome da classe
 Qualquer palavra não-chave pode ser usada, mas por
convenção, o parâmetro começa com uma letra maiúscula
 Os parâmetros, então, são usados ao longo da classe
Exemplo de uma classe simples com parâmetro T
http://publicationslist.org/junio
Sintaxe
 A sintaxe em colchetes angulares não é usada dentro do corpo da
classe
public Sample<T>()
 Para a definição acima, por exemplo, o construtor seria:
public Sample(T umDado)
 No entanto, quando uma instância de uma classe
parametriza é criada, a sintaxe é necessária
Pair<String> pair = new Pair<STring>(“Mario", “Prado");
http://publicationslist.org/junio
Exemplo - Pair
http://publicationslist.org/junio
Exemplo - Pair
http://publicationslist.org/junio
Exemplo - Pair
 Exemplo NetBeans - Pair
http://publicationslist.org/junio
Tipos
 Classes parametrizadas não podem receber
tipos primitivos como parâmetros como int e
double
 Para o uso destes tipos, a compilação Java provê
automaticamente tipos embutidos
 int  new Integer
 double  new Double
 …
http://publicationslist.org/junio
Tipos primitivos embutidos - exemplo
http://publicationslist.org/junio
Exemplo soma
 O seguinte exemplo não funciona:
public class SimpleGenericClass <C extends java.lang.Double> {
private C dado;
private C dado2;
public void setDado(C dado) {
this.dado = dado;
}
public void setDado2(C dado) {
this.dado2 = dado;
}
public C getSum(){
return dado + dado2;  Erro
}
}
 Funcionaria em C, mas não funciona em Java pois Java não suporta
sobrecarga de operadores, no caso o operador +
http://publicationslist.org/junio
Exemplo soma
 O seguinte exemplo não funciona:
public class SimpleGenericClass <C extends java.lang.Double> {
private C dado;
private C dado2;
public void setDado(C dado) {
this.dado = dado;
}
public void setDado2(C dado) {
this.dado2 = dado;
}
public C getSum(){
return dado + dado2;  Erro: o compilador não sabe se o tipo C
possui o operador +
}
}
http://publicationslist.org/junio
Exemplo soma
 O seguinte exemplo não funciona:
public class SimpleGenericClass <C extends java.lang.Double> {
private C dado;
private C dado2;
public void setDado(C dado) {
this.dado = dado;
}
public void setDado2(C dado) {
this.dado2 = dado;
}
public C getSum(){
return dado. doubleValue() + dado2. doubleValue();
 Erro: agora o compilador sabe, mas agora o tipo de
retorno é diferente de C (todo C é Double, mas nem
todo Double é C)
}
}
http://publicationslist.org/junio
Exemplo soma
 O seguinte exemplo não funciona:
public class SimpleGenericClass <C extends java.lang.Double> {
private C dado;
private C dado2;
public void setDado(C dado) {
this.dado = dado;
}
public void setDado2(C dado) {
this.dado2 = dado;
}
public java.lang.Double getSum(){
return dado. doubleValue() + dado2. doubleValue();
}  Agora funciona
}
 Conclusão: o Java Generics é bem menos versátil do que o C++ template, especialmente em
operações aritméticas
http://publicationslist.org/junio
 Uma classe genérica pode ter qualquer número
de parâmetros
 A sintaxe é a mesma, basta separar os parâmetros
por vírgulas
Múltiplos parâmetros
http://publicationslist.org/junio
Múltiplos parâmetros - exemplo
http://publicationslist.org/junio
Múltiplos parâmetros
http://publicationslist.org/junio
Múltiplos parâmetros
http://publicationslist.org/junio
Limitantes para os parâmetros
 Para se trabalhar com um tipo “desconhecido” faz todo o
sentido saber pelo menos do que esse tipo é capaz
 Para isso, é possível definir limitantes para quais tipos
podem ser fornecidos a uma classe parametrizada
 Pode-se exigir que um determinado tipo a ser passado para
a classe herde de uma determinada classe ou implemente
um dada interface, por exemplo:
 Para garantir que uma classe genérica seja serializável, pode-se
requerer a interface Serializable:
public class ClasseExemplo<T extends Serializable>
Obs.: nesta sintaxe não se usa a palavra chave “implements”
http://publicationslist.org/junio
Exemplo – interface Comparable
Exemplo NetBeans  PairComparable
http://publicationslist.org/junio
Métodos Genéricos
 Também é possível trabalhar com métodos
genéricos, independentemente da classe ser
genérica ou não – em ambos os casos, os
parâmetros do método são independentes
 Mesmo que a classe não receba parâmetro, seus
métodos podem receber
 Mesmo em uma classe que recebe parâmetros, os
parâmetros dos métodos podem ser diferentes dos
da classe
http://publicationslist.org/junio
 Sintaxe da definição de um método genérico
public <U> void MetodoGenerico(U a)
 Sintaxe do uso de um método genérico
String c = “teste”;
UmaClasse umaClasse = new UmaClasse();
umaClasse.<String>MetodoGenerico(c);
Métodos Genéricos
http://publicationslist.org/junio
Herança com classes genéricas
 Classes genéricas podem ser usadas em
herança como qualquer outra, podendo herdar
de classes não genéricas ou genéricas
 Importante noção:
 Dada uma classe genérica G<T>
 Dadas duas classes quaisquer A e B
 G<A> não tem qualquer relação com G<B>; são
classes diferentes
http://publicationslist.org/junio
Herança com classes genéricas
http://publicationslist.org/junio
Herança com classes genéricas
Exemplo NetBeans  UnorderedPair
http://publicationslist.org/junio
Limitações
 Os parâmetros de uma classe não são flexíveis
como o identificador de uma classe convencional
 Especificamente, um tipo parâmetro não pode ser
usado em expressões new dentro da própria
classe parametrizada
public class PClass<T>{
public Pclass( ){
T object = new T();
T[] a = new T[10];
Pair<String>[] a = new Pair<String>[10];
}
}
Nenhuma destas expressões é válida
http://publicationslist.org/junio
Opção de compilação Xlint
 A programação com Generics pode se tornar
complicada, pois há um nível extra de cognição
 Uma maneira de se trabalhar com os problemas
encontrados é aumentar o nível de detalhamento
das mensagens do compilador javac
javac –Xlint Sample.java

More Related Content

Similar to Java generics-basics

Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Sérgio Souza Costa
 
Java 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De ClasseJava 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De ClasseRegis Magalhães
 
Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Natanael Fonseca
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Natanael Fonseca
 
Como usar a documentação da API Java 2
Como usar a documentação da API Java 2Como usar a documentação da API Java 2
Como usar a documentação da API Java 2Denis L Presciliano
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesRegis Magalhães
 
Curso Básico de Java - Aula 9
Curso Básico de Java - Aula 9Curso Básico de Java - Aula 9
Curso Básico de Java - Aula 9PeslPinguim
 
Programação Orientado a Objetos - Sessao 4.pptx
Programação Orientado a Objetos - Sessao 4.pptxProgramação Orientado a Objetos - Sessao 4.pptx
Programação Orientado a Objetos - Sessao 4.pptxBernaldinoFernandes
 
Aula 1 - Linguagem III
Aula 1 - Linguagem IIIAula 1 - Linguagem III
Aula 1 - Linguagem IIIJuliano Weber
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02Natanael Fonseca
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens PooInfogenius
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetosCleyton Ferrari
 
Curso de java - Antonio Alves - aula 04
Curso de java - Antonio Alves -  aula 04Curso de java - Antonio Alves -  aula 04
Curso de java - Antonio Alves - aula 04Antonio Alves
 
Programação C - Aula 1
Programação C - Aula 1Programação C - Aula 1
Programação C - Aula 1Filipo Mór
 

Similar to Java generics-basics (20)

Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
 
Java 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De ClasseJava 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De Classe
 
Final e aastract
Final e aastractFinal e aastract
Final e aastract
 
Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Curso Java Básico - Aula 04
Curso Java Básico - Aula 04
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03
 
Como usar a documentação da API Java 2
Como usar a documentação da API Java 2Como usar a documentação da API Java 2
Como usar a documentação da API Java 2
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas Interfaces
 
Java11
Java11Java11
Java11
 
Curso Básico de Java - Aula 9
Curso Básico de Java - Aula 9Curso Básico de Java - Aula 9
Curso Básico de Java - Aula 9
 
Programação Orientado a Objetos - Sessao 4.pptx
Programação Orientado a Objetos - Sessao 4.pptxProgramação Orientado a Objetos - Sessao 4.pptx
Programação Orientado a Objetos - Sessao 4.pptx
 
Aula 1 - Linguagem III
Aula 1 - Linguagem IIIAula 1 - Linguagem III
Aula 1 - Linguagem III
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens Poo
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 
Aula5
Aula5Aula5
Aula5
 
Curso de java - Antonio Alves - aula 04
Curso de java - Antonio Alves -  aula 04Curso de java - Antonio Alves -  aula 04
Curso de java - Antonio Alves - aula 04
 
Programação C - Aula 1
Programação C - Aula 1Programação C - Aula 1
Programação C - Aula 1
 
Aula orientação a objetos
Aula orientação a objetosAula orientação a objetos
Aula orientação a objetos
 
03 fundamentos java
03 fundamentos java03 fundamentos java
03 fundamentos java
 
Java1
Java1Java1
Java1
 

More from Universidade de São Paulo

Introdução às ferramentas de Business Intelligence do ecossistema Hadoop
Introdução às ferramentas de Business Intelligence do ecossistema HadoopIntrodução às ferramentas de Business Intelligence do ecossistema Hadoop
Introdução às ferramentas de Business Intelligence do ecossistema HadoopUniversidade de São Paulo
 
On the Support of a Similarity-Enabled Relational Database Management System ...
On the Support of a Similarity-Enabled Relational Database Management System ...On the Support of a Similarity-Enabled Relational Database Management System ...
On the Support of a Similarity-Enabled Relational Database Management System ...Universidade de São Paulo
 
Effective and Unsupervised Fractal-based Feature Selection for Very Large Dat...
Effective and Unsupervised Fractal-based Feature Selection for Very Large Dat...Effective and Unsupervised Fractal-based Feature Selection for Very Large Dat...
Effective and Unsupervised Fractal-based Feature Selection for Very Large Dat...Universidade de São Paulo
 
Fire Detection on Unconstrained Videos Using Color-Aware Spatial Modeling and...
Fire Detection on Unconstrained Videos Using Color-Aware Spatial Modeling and...Fire Detection on Unconstrained Videos Using Color-Aware Spatial Modeling and...
Fire Detection on Unconstrained Videos Using Color-Aware Spatial Modeling and...Universidade de São Paulo
 
Unveiling smoke in social images with the SmokeBlock approach
Unveiling smoke in social images with the SmokeBlock approachUnveiling smoke in social images with the SmokeBlock approach
Unveiling smoke in social images with the SmokeBlock approachUniversidade de São Paulo
 
Vertex Centric Asynchronous Belief Propagation Algorithm for Large-Scale Graphs
Vertex Centric Asynchronous Belief Propagation Algorithm for Large-Scale GraphsVertex Centric Asynchronous Belief Propagation Algorithm for Large-Scale Graphs
Vertex Centric Asynchronous Belief Propagation Algorithm for Large-Scale GraphsUniversidade de São Paulo
 
Fast Billion-scale Graph Computation Using a Bimodal Block Processing Model
Fast Billion-scale Graph Computation Using a Bimodal Block Processing ModelFast Billion-scale Graph Computation Using a Bimodal Block Processing Model
Fast Billion-scale Graph Computation Using a Bimodal Block Processing ModelUniversidade de São Paulo
 
StructMatrix: large-scale visualization of graphs by means of structure detec...
StructMatrix: large-scale visualization of graphs by means of structure detec...StructMatrix: large-scale visualization of graphs by means of structure detec...
StructMatrix: large-scale visualization of graphs by means of structure detec...Universidade de São Paulo
 
Techniques for effective and efficient fire detection from social media images
Techniques for effective and efficient fire detection from social media imagesTechniques for effective and efficient fire detection from social media images
Techniques for effective and efficient fire detection from social media imagesUniversidade de São Paulo
 
Multimodal graph-based analysis over the DBLP repository: critical discoverie...
Multimodal graph-based analysis over the DBLP repository: critical discoverie...Multimodal graph-based analysis over the DBLP repository: critical discoverie...
Multimodal graph-based analysis over the DBLP repository: critical discoverie...Universidade de São Paulo
 
Supervised-Learning Link Recommendation in the DBLP co-authoring network
Supervised-Learning Link Recommendation in the DBLP co-authoring networkSupervised-Learning Link Recommendation in the DBLP co-authoring network
Supervised-Learning Link Recommendation in the DBLP co-authoring networkUniversidade de São Paulo
 
Reviewing Data Visualization: an Analytical Taxonomical Study
Reviewing Data Visualization: an Analytical Taxonomical StudyReviewing Data Visualization: an Analytical Taxonomical Study
Reviewing Data Visualization: an Analytical Taxonomical StudyUniversidade de São Paulo
 
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Universidade de São Paulo
 
Visualization tree multiple linked analytical decisions
Visualization tree multiple linked analytical decisionsVisualization tree multiple linked analytical decisions
Visualization tree multiple linked analytical decisionsUniversidade de São Paulo
 

More from Universidade de São Paulo (20)

A gentle introduction to Deep Learning
A gentle introduction to Deep LearningA gentle introduction to Deep Learning
A gentle introduction to Deep Learning
 
Computação: carreira e mercado de trabalho
Computação: carreira e mercado de trabalhoComputação: carreira e mercado de trabalho
Computação: carreira e mercado de trabalho
 
Introdução às ferramentas de Business Intelligence do ecossistema Hadoop
Introdução às ferramentas de Business Intelligence do ecossistema HadoopIntrodução às ferramentas de Business Intelligence do ecossistema Hadoop
Introdução às ferramentas de Business Intelligence do ecossistema Hadoop
 
On the Support of a Similarity-Enabled Relational Database Management System ...
On the Support of a Similarity-Enabled Relational Database Management System ...On the Support of a Similarity-Enabled Relational Database Management System ...
On the Support of a Similarity-Enabled Relational Database Management System ...
 
Effective and Unsupervised Fractal-based Feature Selection for Very Large Dat...
Effective and Unsupervised Fractal-based Feature Selection for Very Large Dat...Effective and Unsupervised Fractal-based Feature Selection for Very Large Dat...
Effective and Unsupervised Fractal-based Feature Selection for Very Large Dat...
 
Fire Detection on Unconstrained Videos Using Color-Aware Spatial Modeling and...
Fire Detection on Unconstrained Videos Using Color-Aware Spatial Modeling and...Fire Detection on Unconstrained Videos Using Color-Aware Spatial Modeling and...
Fire Detection on Unconstrained Videos Using Color-Aware Spatial Modeling and...
 
Unveiling smoke in social images with the SmokeBlock approach
Unveiling smoke in social images with the SmokeBlock approachUnveiling smoke in social images with the SmokeBlock approach
Unveiling smoke in social images with the SmokeBlock approach
 
Vertex Centric Asynchronous Belief Propagation Algorithm for Large-Scale Graphs
Vertex Centric Asynchronous Belief Propagation Algorithm for Large-Scale GraphsVertex Centric Asynchronous Belief Propagation Algorithm for Large-Scale Graphs
Vertex Centric Asynchronous Belief Propagation Algorithm for Large-Scale Graphs
 
Fast Billion-scale Graph Computation Using a Bimodal Block Processing Model
Fast Billion-scale Graph Computation Using a Bimodal Block Processing ModelFast Billion-scale Graph Computation Using a Bimodal Block Processing Model
Fast Billion-scale Graph Computation Using a Bimodal Block Processing Model
 
An introduction to MongoDB
An introduction to MongoDBAn introduction to MongoDB
An introduction to MongoDB
 
StructMatrix: large-scale visualization of graphs by means of structure detec...
StructMatrix: large-scale visualization of graphs by means of structure detec...StructMatrix: large-scale visualization of graphs by means of structure detec...
StructMatrix: large-scale visualization of graphs by means of structure detec...
 
Apresentacao vldb
Apresentacao vldbApresentacao vldb
Apresentacao vldb
 
Techniques for effective and efficient fire detection from social media images
Techniques for effective and efficient fire detection from social media imagesTechniques for effective and efficient fire detection from social media images
Techniques for effective and efficient fire detection from social media images
 
Multimodal graph-based analysis over the DBLP repository: critical discoverie...
Multimodal graph-based analysis over the DBLP repository: critical discoverie...Multimodal graph-based analysis over the DBLP repository: critical discoverie...
Multimodal graph-based analysis over the DBLP repository: critical discoverie...
 
Supervised-Learning Link Recommendation in the DBLP co-authoring network
Supervised-Learning Link Recommendation in the DBLP co-authoring networkSupervised-Learning Link Recommendation in the DBLP co-authoring network
Supervised-Learning Link Recommendation in the DBLP co-authoring network
 
Graph-based Relational Data Visualization
Graph-based RelationalData VisualizationGraph-based RelationalData Visualization
Graph-based Relational Data Visualization
 
Reviewing Data Visualization: an Analytical Taxonomical Study
Reviewing Data Visualization: an Analytical Taxonomical StudyReviewing Data Visualization: an Analytical Taxonomical Study
Reviewing Data Visualization: an Analytical Taxonomical Study
 
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
 
Dawarehouse e OLAP
Dawarehouse e OLAPDawarehouse e OLAP
Dawarehouse e OLAP
 
Visualization tree multiple linked analytical decisions
Visualization tree multiple linked analytical decisionsVisualization tree multiple linked analytical decisions
Visualization tree multiple linked analytical decisions
 

Java generics-basics