Pelo o que eu estava estudando a aplicação de genéricos é para "type safe", onde é possível verificar erros em tempo de compilação.
Ou seja, após compilado os dois códigos seriam iguais:
List<String> lista1 = new ArrayList<String>();
List lista2 = new ArrayList();
Porém, esbarrei com a seguinte questão em um simulado:
import java.util.*;
class test
{
public static void main ( String [] args )
{
Map < Integer , String > map = new LinkedHashMap < Integer , String > (); //1
Map < Integer , String > sap = new HashMap < Integer , String > (); //2
populate( map );
populate( sap );
System.out.println( map.get(1) + sap.get(1) );
}
static void populate ( Map m )
{
for ( int i = 0 ; i < 10 ; i++ )
{
m.put(i,i);
}
}
}
A resposta é "Runtime error".
Mas se alterarmos as linhas 1 e 2 para o código abaixo funciona:
Map map = new LinkedHashMap ();
Map sap = new HashMap();
Os dois após compilados não seriam iguais? Por que um funciona e o outro não?

