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

What's hot

Tipos de datos definidos por el programador
Tipos de datos definidos por el programadorTipos de datos definidos por el programador
Tipos de datos definidos por el programador
Carlos Pes
 
2 lesson 2 object oriented programming in c++
2 lesson 2 object oriented programming in c++2 lesson 2 object oriented programming in c++
2 lesson 2 object oriented programming in c++
Jeff TUYISHIME
 
Object-Oriented Programming with Java UNIT 1
Object-Oriented Programming with Java UNIT 1Object-Oriented Programming with Java UNIT 1
Object-Oriented Programming with Java UNIT 1
SURBHI SAROHA
 
Linguagem C 01 Primeiros Passos
Linguagem C 01 Primeiros PassosLinguagem C 01 Primeiros Passos
Linguagem C 01 Primeiros Passos
Regis Magalhães
 

What's hot (20)

Garbage collection
Garbage collectionGarbage collection
Garbage collection
 
graph.ppt
graph.pptgraph.ppt
graph.ppt
 
Tipos de datos definidos por el programador
Tipos de datos definidos por el programadorTipos de datos definidos por el programador
Tipos de datos definidos por el programador
 
Main method in java
Main method in javaMain method in java
Main method in java
 
Inheritance in Java
Inheritance in JavaInheritance in Java
Inheritance in Java
 
Polymorphism in java
Polymorphism in javaPolymorphism in java
Polymorphism in java
 
PHP Variables and scopes
PHP Variables and scopesPHP Variables and scopes
PHP Variables and scopes
 
Java Tutorial
Java TutorialJava Tutorial
Java Tutorial
 
Arrays in c
Arrays in cArrays in c
Arrays in c
 
oops concept in java | object oriented programming in java
oops concept in java | object oriented programming in javaoops concept in java | object oriented programming in java
oops concept in java | object oriented programming in java
 
Pointers in c++
Pointers in c++Pointers in c++
Pointers in c++
 
C++ Arrays
C++ ArraysC++ Arrays
C++ Arrays
 
Basics of Java
Basics of JavaBasics of Java
Basics of Java
 
Exception Handling in Java
Exception Handling in JavaException Handling in Java
Exception Handling in Java
 
Samples solution-manual-assembly-language-for-x86-processors-7th-edition-by-k...
Samples solution-manual-assembly-language-for-x86-processors-7th-edition-by-k...Samples solution-manual-assembly-language-for-x86-processors-7th-edition-by-k...
Samples solution-manual-assembly-language-for-x86-processors-7th-edition-by-k...
 
Java Concurrency by Example
Java Concurrency by ExampleJava Concurrency by Example
Java Concurrency by Example
 
2 lesson 2 object oriented programming in c++
2 lesson 2 object oriented programming in c++2 lesson 2 object oriented programming in c++
2 lesson 2 object oriented programming in c++
 
Object-Oriented Programming with Java UNIT 1
Object-Oriented Programming with Java UNIT 1Object-Oriented Programming with Java UNIT 1
Object-Oriented Programming with Java UNIT 1
 
Linguagem C 01 Primeiros Passos
Linguagem C 01 Primeiros PassosLinguagem C 01 Primeiros Passos
Linguagem C 01 Primeiros Passos
 
Complete C++ programming Language Course
Complete C++ programming Language CourseComplete C++ programming Language Course
Complete C++ programming Language Course
 

Similar to Java generics-basics

UFCG.JCert Reunião 1 - Declarações e Controle de Acesso
UFCG.JCert Reunião 1 - Declarações e Controle de AcessoUFCG.JCert Reunião 1 - Declarações e Controle de Acesso
UFCG.JCert Reunião 1 - Declarações e Controle de Acesso
Anderson Ledo
 
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 Classe
Regis Magalhães
 
Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Curso Java Básico - Aula 04
Curso Java Básico - Aula 04
Natanael 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 2
Denis L Presciliano
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas Interfaces
Regis 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 9
PeslPinguim
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens Poo
Infogenius
 

Similar to Java generics-basics (20)

UFCG.JCert Reunião 1 - Declarações e Controle de Acesso
UFCG.JCert Reunião 1 - Declarações e Controle de AcessoUFCG.JCert Reunião 1 - Declarações e Controle de Acesso
UFCG.JCert Reunião 1 - Declarações e Controle de Acesso
 
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
 

More from Universidade 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
 
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
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 images
Universidade 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
 

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