Pessoal, relendo uns posts antigos, encontrei uma discussão interessantíssima do sobre Generics nessse tópico: http://www.guj.com.br/posts/list/16145.java. Por curiosidade e depois de um tempo para amadurecimento, alguém que postou naquela época mudou de oipinião? Conseguiram encontrar reais vantagens no uso de Genérics?
Generics foi útil para transformar aquela aplicação zero-warnings do Java 1.4 em uma aplicação com zilhões de warnings para Java 5.
Não acho a idéia ruim, mas foi muito mal implementado e não serve como meta-programação. Na prática, só usamos porque as Collections faz uso (e chia quando não usa), mas nunca vi ninguém escrevar coisas em Java para usar generics.
Eu mudei de opinião. Generics para o desenvolvedor de frameworks complicou um pouco a vida, mas para o usuários de frameworks facilitou bastante a vida.
Na verdade não facilitou, apenas deixou a coisa mais sólida e limpa. Facilitou o refactoring e deixou a coisa mais robusta.
Não é o fim do mundo ter o seu código cheio de casts, mas é realmente mais bonito e natural não tê-los.
E agora então com a aumento da popularidade das linguagens dinamicas de script, se Java não tivesse Generics estaria sofrendo bombardeios!
Eu não mudei muito de idéia desde aquele tempo - não sou defensor ferrenho dos generics, tais como implementados no Java; mas eu acredito que eles tornam seu código mais legível se usados adequadamente.
Eu já usava algo parecido (em comentários) quando eles não existiam.
O problema, na verdade, é que falta algo para encapsular a complexidade dos generics - em C++ eu posso usar um template (basic_string) sem saber que ele existe a maior parte do tempo; eu só conheço duas especializações dele, que são basic_string<char> == string (representa uma string ANSI), e basic_string<wchar_t> == wstring (representa uma string Unicode). Mas em Java eu seria obrigado a sempre explicitar a declaração completa de string, que na verdade depende da implementação - em Microsoft Visual C++ (Visual Studio 2003), string é definida como:
typedef basic_string <char, char_traits <char>, allocator <char>> string;
Não sei se a declaração faz parte da biblioteca-padrão do C++ ou se a declaração completa é deixada para a implementação.
Imagine se você tivesse que declarar seu "hello, world" como:
public static void main (BasicString<Char,CharTraits <Char>,Allocator<Char>>[] args) {
}
Ia ser muito doido.
Acho que o pessoal se acostumou a usar, mas se não tivesse não faria falta, na minha opinião. A sintaxe ficou complicada e aumentou demias a verbosidade.
Generics são interessantes, mas dispensáveis. Essa é minha opinião.
generics são excelentes… é muito ruim ficar tendo que fazer casts no projeto inteiro com generics e muito mais pratico e despensa casts… relamente tava faltando algo como o template do C++ no java dai veio os generics que são mais praticos que os templates eu acho…
Eu acho que Generics complicou muito a sintaxe do Java. Existe linhas que não dá para ler. Se um cara que está iniciando com Java se depara com uma linha cabeluda de Generics, vai ficar muisto assustado. Eu até hoje me assusto com algumas coisas…
[quote=ricardo_rico]
Eu acho que Generics complicou muito a sintaxe do Java…[/quote]
Isso é verdade tem umas notações que um monte de gente bastante experiente tem que parar para ler, ou seja, a verbosidade aumentou muito.
Olá
Não só mudei de opinião como queimei minha língua fazendo previsões completamente erradas.
-
O uso de generics não é tão complicado como pensei na maioria das vezes
-
O uso de generics não complicou mais a leitura do código como eu imaginei
-
O que o generics tem de mais complicado o desenvolvedor comum raramente precisa escrever, quando muito precisa saber ler em alguma API.
[]s
Luca
Eu nao conseguiria viver mais sem generics… mas so agora que domino bem o funcionamento da erasure e o problema de nao serem reificados.
Eu escrevi bastante sobre situacoes complicadas com generics e codigos dificeis existentes na propria api da sun:
http://blog.caelum.com.br/2007/04/08/generics-inferencia-de-tipos-e-reificacao-no-java-7/
http://blog.caelum.com.br/2006/10/29/brincando-com-generics-o-bizarregenericdao/
Mas tem vezes que o generics não ajuda apenas no casting, mas evita aquele monte de hierarquia de classes paralelas.
Sempre achei generics muito útil e prático de usar. Porém no começo achava que enorme cagada não passar de sintax sugar do compilador. Porém hoje vejo como não é nada simples implementar generic com reification de maneira decente, não mesmo.
A 3 anos atrás eu não programava.
Mas vou te dizer… fiz um AG ano passado quando não conhecia generics… rapaiz do céu, quantas linhas deram (± umas 400 por classe).
Usei Refactoring (Fowler seja abençoado)… resultado?
Eram 4 classes. Antes, cada uma tinha 400 linhas (só uma que tinha 200). Depois de aplicar generics, TODAS as classes não passam de 100 linhas.
Se juntar tudo em um arquivo só chega a mais ou menos umas 200 linhas.
Ficou muito mais legivel, menos trabalho, mais conforto e MUITO, mas MUITO menos preocupado eu fiquei.
Abraço.