Java

Friday, March 24, 2006

 

generics

O suporte a generics foi introduzido à linguagem java a partir da versão 5 ou 1.5. Sua maior vantagem é permitir que se possa declarar precisamente o tipo de objeto com o qual uma coleção irá lidar. Por exemplo, se preciso de uma lista que irá trabalhar apenas com Strings, então, usando generics, posso declarar uma lista que só lida com Strings:

List <String> = new ArrayList <String>();

Generics, no entanto, foi implementando de forma a ser compatível com o código legado, o que gera situações potenciais de risco. O efeito colateral disso é que esta mesma lista pode ser passada como argumento para um método que não declara o tipo de objeto que a lista pode receber. Dentro deste método, então, podemos inserir um objeto não-String numa lista que, em princípio, só deveria receber Strings. Por exemplo, o código abaixo compila perfeitamente, mas gera uma exceção em tempo de execução, ao tentar acessar, no loop, a String inserida na lista por addString() como se ela fosse um objeto do tipo Integer, já que, supostamente, nesta lista só haveria objetos do tipo Integer.


import java.util.*;

public class List{

public static void main(String args[]){
ArrayList<Integer> array= new ArrayList<Integer>();
array.add(1);
array.add(2);

addString(array);

System.out.println("Tamanho: "+array.size());

for (Integer i: array){
System.out.println(i.intValue());
}
}

public static void addString(ArrayList array){
array.add("Hello");
}
}


Generics foi implementando apenas como um coméstico, isto é, ele serve de informação apenas para o compilador, mas, em tempo real, tudo continua como antes. Para a JVM, uma lista do tipo ArrayList<String> continua sendo uma ArrayList e, por isso, pode receber qualquer tipo de objeto em tempo de execução.

Comments: Post a Comment



<< Home

Archives

March 2006   April 2006   May 2006   July 2006   August 2006  

This page is powered by Blogger. Isn't yours?