Sunteți pe pagina 1din 22

Lio 13

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

Includos na Verso 5 do Java Problemas com casting (converso de tipos):


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

Por que generics? Benefcios:


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

Passaremos agora para o NetBeans

Introduo Programao II

Declarando Classe Utilizando Generics

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

Declarando Classe Utilizando Generics

Declarao da classe BasicGeneric:


class BasicGeneric<A>

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

Declarando Classe Utilizando Generics

Declarando uma instncia da classe

Deve ser especificado o tipo de referncia com qual se vai trabalhar

BasicGeneric<String> basicGeneric = new BasicGeneric<String>(data1); BasicGeneric<Integer> basicGeneric = new BasicGeneric<Integer>(data1);

Introduo Programao II

Declarando Classe Utilizando Generics

Declarao do mtodo getData:


public A getData() { return data; }

Introduo Programao II

10

Declarando Classe Utilizando Generics

Instncias da classe BasicGeneric

presa ao tipo String:

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

Generics: Limitao "Primitiva"

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

Para compilar usando JDK (v. 1.5.0):


javac -version -source "1.5" -sourcepath src -d classes src/SwapClass.java onde

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

Limitando as instanciaes de tipo de uma classe:

Utilize a palavra-chave extends no parmetro de tipo

class ClassName <ParameterName extends ParentClass>

Introduo Programao II

15

Generics Limitados

Permite uma checagem esttica de tipos adicional


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

Quando no existir um limite explcito no parmetro


O limite default Object Uma instncia no pode invocar mtodos que no apaream na classe Object

Introduo Programao II

16

Declarando Mtodos Utilizando Generics

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

Declarando Mtodos Utilizando Generics

O Java tambm utiliza um mecanismo de inferncia de tipos


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

Passaremos agora para o NetBeans

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

Os seguintes parceiros tornaram JEDI Lngua Portuguesa:

TM

possvel em

Introduo Programao II

22

S-ar putea să vă placă și