Documente Academic
Documente Profesional
Documente Cultură
Introduo a Generics
Introduo Programao II 1
Objetivos
Ao final desta lio, o estudante ser capaz de:
Enumerar os benefcios de Generics Declarar classes utilizando Generics Utilizar Generics limitados Declarar mtodos utilizando Generics Usar colees Java com Generics
Introduo Programao II
Generics
um perigo em potencial para uma ClassCastException Torna nossos cdigos mais poludos Menos legveis Destri benefcios de uma linguagem com tipos fortemente definidos
Introduo Programao II
Generics
Permite que uma nica classe trabalhe com uma grande variedade de tipos uma forma natural de eliminar a necessidade de se fazer cast Preserva benefcios da checagem de tipos
Introduo Programao II
Generics
A remoo do downcast no significa poder atribuir qualquer coisa ao valor de retorno do mtodo get e eliminar o typecast tambm Atribuir outra coisa alm de String sada do mtodo get causar um erro de equiparao de tipos em tempo de compilao
Introduo Programao II
Generics
Introduo Programao II
Para que o fragmento de cdigo anterior funcione, devemos ter definido uma verso Generics da classe ArrayList A verso mais recente do Java fornece aos usurios verses que utilizam Generics para todas as classes Collection
Introduo Programao II
Contm o parmetro de tipo: <A> Indica que a classe declarada uma classe Generics Classe no trabalha com nenhuma referncia a um tipo especfico
Declarao do atributo:
private A data;
O atributo data de um tipo Generic e depende do tipo de dado com que o objeto BasicGeneric for desenvolvido para trabalhar
Introduo Programao II
Introduo Programao II
Introduo Programao II
10
BasicGeneric<String> basicGeneric = new BasicGeneric<String>(data1); String data2 = basicGeneric.getData(); presa ao tipo Integer: BasicGeneric<Integer> basicGeneric = new BasicGeneric<Integer>(data1); Integer data2 = basicGeneric.getData();
Introduo Programao II
11
Tipos Generics do Java so restritos a tipos de referncia (objetos) e no funcionaro com tipos primitivos
BasicGeneric<int> basicGeneric = new BasicGeneric<int>(data1);
Soluo:
Encapsular tipos primitivos antes de us-los Utilizar tipos encapsuladores (wrapper types) como argumentos para um tipo Generics
Introduo Programao II
12
Compilando Generics
src refere-se localizao do cdigo fonte java class refere-se localizao onde o arquivo da classe ser gravado Exemplo:
javac -version -source "1.5" -sourcepath c:\temp -d c:\temp c:/temp/MyFile.java
Introduo Programao II
13
Generics Limitados
No exemplo anterior:
Os parmetros de tipo da classe BasicGeneric podem ser de qualquer tipo de dado de referncia
possvel restringir os tipos em potencial usados em instanciaes de uma classe que utiliza generics
possvel limitar o conjunto de possveis tipos utilizados como argumento na instanciao da classe para um conjunto de subtipos de um determinado tipo amarrado classe
Introduo Programao II
14
Generics Limitados
Introduo Programao II
15
Generics Limitados
Garante que toda instanciao de um tipo generic respeita os limites (ou restries) que atribumos a ele Pode-se chamar, de forma segura, qualquer mtodo encontrado no tipo esttico do objeto
O limite default Object Uma instncia no pode invocar mtodos que no apaream na classe Object
Introduo Programao II
16
O Java tambm nos permite declarar um mtodo utilizando generics Por que generics em mtodos?
Dependncias de tipo entre os argumentos e o valor de retorno so naturalmente genricas Porm a natureza genrica muda de chamada para chamada ao mtodo ao invs de depender da informao do tipo da classe
Introduo Programao II
17
Automaticamente infere os tipos dos mtodos polimrficos baseado no tipo dos argumentos Diminui o excesso de palavras e a complexidade na invocao do mtodo
Para construir uma nova instncia de ArrayList<Integer>, simplesmente teramos o seguinte comando:
Utilities.make(Integer(0));
Introduo Programao II
18
Generics e Colees
public public public public public public public public public boolean add(E o) void clear() boolean remove(Object o) boolean contains(Object o) boolean isEmpty() int size() Iterator<E> iterator() boolean equals(Object o) int hashCode()
Introduo Programao II
19
Generics e Colees
Introduo Programao II
20
Sumrio
Por que Generics? Declarando classe utilizando Generics Generics limitados Declarando mtodo utilizando Generics Generics e Colees
Introduo Programao II
21
Parceiros
TM
possvel em
Introduo Programao II
22