SlideShare une entreprise Scribd logo
1  sur  27
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

Cara membuat fungsi dan prosedur pada java
Cara membuat fungsi dan prosedur pada javaCara membuat fungsi dan prosedur pada java
Cara membuat fungsi dan prosedur pada java
Devandy Enda
 
Biaya Produksi
Biaya Produksi Biaya Produksi
Biaya Produksi
L N
 
Operasi hitung bilangan bulat dalam pemecahan masalah copy
Operasi hitung bilangan bulat dalam pemecahan masalah   copyOperasi hitung bilangan bulat dalam pemecahan masalah   copy
Operasi hitung bilangan bulat dalam pemecahan masalah copy
Eddy Cla
 

Tendances (20)

Inheritance, abstract class, interface
Inheritance, abstract class, interfaceInheritance, abstract class, interface
Inheritance, abstract class, interface
 
Laporan Praktikum Pertemuan 1, PBO
Laporan Praktikum Pertemuan 1, PBOLaporan Praktikum Pertemuan 1, PBO
Laporan Praktikum Pertemuan 1, PBO
 
Cara membuat fungsi dan prosedur pada java
Cara membuat fungsi dan prosedur pada javaCara membuat fungsi dan prosedur pada java
Cara membuat fungsi dan prosedur pada java
 
Kerangka Strategi Pembelajaran
Kerangka Strategi PembelajaranKerangka Strategi Pembelajaran
Kerangka Strategi Pembelajaran
 
Biaya Produksi
Biaya Produksi Biaya Produksi
Biaya Produksi
 
Lembar kerja siswa plsv (tanpa jwban)
Lembar kerja siswa plsv (tanpa jwban)Lembar kerja siswa plsv (tanpa jwban)
Lembar kerja siswa plsv (tanpa jwban)
 
KOORDINAT KARTESIUS
KOORDINAT KARTESIUSKOORDINAT KARTESIUS
KOORDINAT KARTESIUS
 
Kombinatorial
KombinatorialKombinatorial
Kombinatorial
 
Modul lemari
Modul lemariModul lemari
Modul lemari
 
PBO - Pert 5, Mengenal dan Memahami Konsep Perulangan Pada Java
PBO - Pert 5, Mengenal dan Memahami Konsep Perulangan Pada JavaPBO - Pert 5, Mengenal dan Memahami Konsep Perulangan Pada Java
PBO - Pert 5, Mengenal dan Memahami Konsep Perulangan Pada Java
 
Operasi hitung bilangan bulat dalam pemecahan masalah copy
Operasi hitung bilangan bulat dalam pemecahan masalah   copyOperasi hitung bilangan bulat dalam pemecahan masalah   copy
Operasi hitung bilangan bulat dalam pemecahan masalah copy
 
Modul Pratikum Algoritma dan Pemrograman dalam Bahasa Visual C++ 2010
Modul Pratikum Algoritma dan Pemrograman dalam Bahasa Visual C++ 2010Modul Pratikum Algoritma dan Pemrograman dalam Bahasa Visual C++ 2010
Modul Pratikum Algoritma dan Pemrograman dalam Bahasa Visual C++ 2010
 
OLimpiade Matematika kalkulus
OLimpiade Matematika kalkulusOLimpiade Matematika kalkulus
OLimpiade Matematika kalkulus
 
RPP MATRIKS KELAS XI MIPA KURIKULUM 2013
RPP MATRIKS KELAS XI MIPA KURIKULUM 2013RPP MATRIKS KELAS XI MIPA KURIKULUM 2013
RPP MATRIKS KELAS XI MIPA KURIKULUM 2013
 
Rpp Teorema Pythagoras K-13
Rpp Teorema Pythagoras K-13Rpp Teorema Pythagoras K-13
Rpp Teorema Pythagoras K-13
 
Modul Pembelajaran Kapita Selekta Matematika
Modul Pembelajaran Kapita Selekta MatematikaModul Pembelajaran Kapita Selekta Matematika
Modul Pembelajaran Kapita Selekta Matematika
 
KAPITA SELEKTA MATEMATIKA
KAPITA SELEKTA MATEMATIKAKAPITA SELEKTA MATEMATIKA
KAPITA SELEKTA MATEMATIKA
 
Makalah arit kel.7
Makalah arit kel.7Makalah arit kel.7
Makalah arit kel.7
 
Teori produksi satu input
Teori produksi satu inputTeori produksi satu input
Teori produksi satu input
 
Pertemuan 3
Pertemuan 3Pertemuan 3
Pertemuan 3
 

Similaire à 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
 

Similaire à 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
 

Plus de 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
 

Plus de 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