Generics como vai ser na 1.5 foi a pior das besteiras que ja fizeram em nome de ter ‘backward compatibily’.
Ela juntou as desvantagens de ambos modelos, com/sem generics, e ainda piorou, pra melhorar ainda mais so falta autounboxing pra fechar a festa.
Sem querer puxar a sardinha pro lado da MS, mas a implementacao de generics em c# vai ser infinitamente melhor.
Primeiro, ja nao basta ter feito errado na primeira vez, repetiram denovo a mesma besteira, tipos covariantes que nao deveriam ser, como arrays. Pra quem nao sabe, me refiro ao fato de 1 array de referencias poder ser downcasted para array de uma superclasse do tipo da referencia, ex: Integer[] x; Number[] y = x;
Depois o fato da tipagem dos generics ser fraca, pq qualquer coisa faz vc perder essa informacao, devido a covariancia dos tipos genericos, veja 1 exemplo VALIDO do uso de generics:
List x = new ArrayList();
List y = x; //toda informacao de tipagem acabou de ir pro espaco
List<Class> z = (List<Class>)y; //pior de tudo isso nao gera execessao
z.add(String.class); //e isso tb funciona
Ou seja, que acreditou que Generics vai atenuar erros envolvendo CastCastExceptions no uso de Collections se enganou, serao menos, mas alguns poucos vao ser realmente complexos de serem encontrados, dive o exemplo acima.
Outra era a espectativa de um ganho consideravel em performance por poder especializar em tipo primitivos, oque nao vai poder e agora com autoboxing, maioria vai deixar de reclamar pq agora List.add(1) funciona.
A unica coisa boa dos generics eh a opcao de poder definir contrains pros tipos a serem usados.