O Java 5 introduziu o conceito de Generics, o que tem facilitado muito a manipulação de collections.

Quem tabalhou na migração de projetos do Java 1.4 para Java 5 percebeu o grande número de warnings que passam a ser exibidos sobre raw types. São os unchecked warnings.

Mas então, que diabo é um raw type?
Raw type é o tipo “cru” do elemento, ou seja sem generics. Exemplo:

List lista = new ArrayList(); //Raw Type
List nomes = new ArrayList(); //Generic Type

Qual é o problema de se utilizar raw types?
O problema é que raw types não tem a clareza e segurança que os generics tem.

Como assim?
Ao usar tipos generics você percebe um possível problema o mais rápido possível, ou seja, em tempo de desenvolvimento. Classcast exceptions deixam de ser um tormento para você.

Por exemplo:

Com raw type

 
List numeros = new ArrayList();
numeros.add(“30”);
Integer n = numeros.get(0);
//Classcast exception em tempo de execução.

Com generic type

 
List numeros = new ArrayList();
numeros.add(“30”);
// Não compila :.)

Mas se eu nunca devo usar esses raw types porque eles existem?
Os raw types existem por uma questão de compatibilidade do Java, códigos que foram escritos em versões anteriores precisam continuar funcionando, por isso o compilador exibe apenas warnings.

Ok. Mas o que devo fazer em casos em que não sei exatamente que tipo devo tratar em uma collection?
Para casos assim existem os “unbounded wildcard types”, representa-se com um ponto de interogação. Veja:

 
boolean temOMesmoNumeroDeElementos(Set<?> a, Set<?> b){
   return a.size() == b.size();
}

O uso de wild cards torna seu método seguro porque impede que qualquer valor diferente de null seja inserido em sua collection.

Raw types geram warnings conhecidos como unchecked warnings. Elimine todos que você puder! Todo unchecked warning representa um posssível ClassCastException em Runtime. Se não for possível eliminar o warning, utilize a annotation @SupressWarnings(“unchecked”) sempre no menor escopo possível (variável, bloco, método, etc.).

Concluindo, não use raw types em código novo, entenda os beneficios que se tem ao utilizar generics e refatore o código antigo tornando-o mais seguro e claro.