The Power of Generics
Com o surgimento do java 5.0 vai a funcionalidade chamada generics. Na minha opinião junto com as annotations essa foi uma das melhores coisas que a sun fez no java 5.0. Certamente os Generics adicionaram bem mais complexidade ao código java, mas o ganho de código é imenso. Praticamente toda API do java foi reescrita para suportar generics.
Antes tinhamos um código assim:
com generics podemos fazer assim(vou usar foreach também):
Isso foi bom pois diminuiu o número de linhas de códigos. Mas os generics para manter compatibilidade com as versões antigas do java só existe em tempo de compilação.
Um exemplo de como pegar um Bean do Spring já tipado
Mas o ID do Spring deve ser o mesmo nome da class só que todo em lower case
Um outro exemplo é a implementação de um ServiceLocator Generico
Aqui temos uma convenção de nomes também
O poder do generics é muito grande, mas não é maior que o de Crom, agora sentem-se ao meu lado para eu lhes falar daqueles dias de grandes Aventuras.
Antes tinhamos um código assim:
...
List l = new ArrayList();
l.add("diego");
l.add("teste");
l.add("haha");
Iterator it = l.iterator();
while(it.hasNext()){
System.out.println((String)it.next());
}
com generics podemos fazer assim(vou usar foreach também):
...
List <String> l = new ArrayList <String>l.add("diego");
l.add("teste");
l.add("haha");
//l.add(new Object); // erro pois object não é String.
Iterator it = l.iterator();
while(it.hasNext()){
System.out.println(it.next()); // pois não precisamos de cast.
}
Isso foi bom pois diminuiu o número de linhas de códigos. Mas os generics para manter compatibilidade com as versões antigas do java só existe em tempo de compilação.
Um exemplo de como pegar um Bean do Spring já tipado
Mas o ID do Spring deve ser o mesmo nome da class só que todo em lower case
public static <T> T getBean(Class <T> clazz,BeanFactory beanFactory){
return (T) beanFactory.getBean(clazz.getName().toLowerCase());
}
Um outro exemplo é a implementação de um ServiceLocator Generico
Aqui temos uma convenção de nomes também
public static <T> T getServiceRemote(Class<T> clazz) throws NamingException{
T beanRemote = (T) context.lookup(clazz.getSimpleName() + RemoteJNDIName );
return beanRemote;
}
O poder do generics é muito grande, mas não é maior que o de Crom, agora sentem-se ao meu lado para eu lhes falar daqueles dias de grandes Aventuras.