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:




...

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.

Popular posts from this blog

Kafka Streams with Java 15

Rust and Java Interoperability

HMAC in Java