Você está na página 1de 3

Generics

No artigo anterior de Java, vimos como usar typecast e instanceof. Aqui, veremos uma pequena introduo de Generics ou programao genrica, na qual ser muito importante quando formos tratar de classes e interfaces de coleo como, por exemplo, a classe Vector. Generics, ou programao genrica, serve para determinar para o compilador, qual tipo de classe deve ser interpretada. Por exemplo, vamos imaginar que ser criada uma classe chamada Aparelho que ir conter um objeto de alguma outra classe. Para que essa classe possa aceitar qualquer tipo de classe, devemos fazer uso de generics. Generics indicado como um identificador entre os sinais de maior e menor (<>).

Criar classes usando generics


Para criar uma classe usando generics, basta que logo aps o nome da classe coloquemos o indicador genrico. Esse indicador genrico simplesmente uma letra na qual ser substituda dentro da classe no momento da execuo.
01.package tiexpert; 02. 03.public class Aparelho <T> { 04.T objeto; 05. 06.public Aparelho(T objeto) { 07.this.objeto = objeto; 08.} 09. 10.public T getObjeto() { 11.return objeto; 12.} 13. 14.public void setObjeto(T objeto) { 15.this.objeto = objeto ; 16.} 17.}

Como a letra T identifica um tipo genrico, ela ser substituda por qualquer classe. Vamos imaginar agora que temos duas classes distintas. A classe TV:
01.package tiexpert; 02. 03.public class TV { 04.int tamanho; 05.int canal; 06.int volume;

07.boolean ligada; 08. 09.public TV(int tamanho, int canal, int volume, boolean ligada) { 10.this.tamanho = tamanho; 11.this.canal = canal; 12.this.volume = volume; 13.this.ligada = ligada; 14.} 15. 16.// mtodos get e set 17. 18.}

E a classe Radio:
01.package tiexpert; 02. 03.public class Radio { 04.public static int AM = 1; 05.public static int FM = 2; 06.private float frequencia; 07.private int volume; 08.private int banda; 09. 10.public Radio(float frequencia, int volume, int banda) { 11.this.frequencia = frequencia; 12.this.volume = volume; 13.this.banda = banda; 14.} 15. 16.// mtodos get e set 17. 18.}

Instanciar uma classe genrica


Se fossemos criar um programa que usa as duas classes de aparelhos acima, faramos:
01.package tiexpert; 02. 03.public class MinhaClasse { 04.public static void main(String[] args) { 05.Aparelho<TV> aparelho1 = new Aparelho<TV>(new TV(29, 0, 0, false)); 06.Aparelho<Radio> aparelho2 = new Aparelho<Radio>(new Radio(88.1f, 0, Radio.FM)); 07.System.out .println(aparelho1.getObjeto().getClass()); 08.System.out.println(aparelho2.getObjeto().getClass()); 09.} 10.}

Perceba o seguinte: sem o uso de generics, o compilador no conseguiria saber qual a diferena entre aparelho1 e aparelho2, pois ele os trataria da mesma forma. Nesse caso, seria obrigatrio o uso de typecast para determinar ao compilador que dado est sendo processado.

Se pensarmos em uma aplicao muito grande, alm de ficar cansativo ter que usar typecast toda vez que fossemos usar um aparelho, seria muito provvel que erraramos em algum momento. Java usa uma pequena conveno de nomenclatura para as letras de identificao de generics (que so vastamente utilizadas no Framework de colees Java), sendo:
y y y y y

E - Elemento K - Chave N - Nmero T - Tipo V - Valor

Generics um assunto bastante extenso com vrios tpicos que podem ser abordados, dentre os quais podemos citar:
y y y y

Multiplos tipos genricos. Ex.: <T, E, N>; Tipos genricos limitados. Ex.: <U extends Number>; Wildcards; e Subtipos;

Você também pode gostar