| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/06/2005 16:08:24
|
saoj
JWizard
![[Avatar]](/images/avatar/2e7ceec8361275c4e31fee5fe422740b.png)
Membro desde: 09/03/2004 23:34:46
Mensagens: 2667
Localização: Chicago, EUA
Offline
|
Eu e provavelmente a grande maioria dos programadores Java ainda possuem um monte de questões que não foram respondidas pela galera que manja e defende Generics:
As minhas dúvidas principais são:
1) Qual é o valor prático de Generics, a não ser para pegar erro de cast no compile-time e para economizar casts por parte do programador? Falar que é para tornar a linguagem mais type-safe não ajuda! Qual é a vantagem de tornar o Java uma linguagem mais type-safe? Não tava bom do jeito que estava? O que tava ruim? Tem que colocar uma enquete do tipo: Quem aqui se incomodava de dar um cast nos objetos retornados de uma collection?
2) Pra que serve generics a não ser para fazer retorno covariante? (Vide pergunta anterior para entender porque eu não entendo o benefício prático de retorno covariante.)
Luca wrote:
Exemplos: o Java Print Service é uma colcha de retalhos, o javax.comm precisa de correções e revisão e o monolítico Java Web Start está longe de atender as necessidades de instalação/atualização em milhares de clientes.
Concordo plenamente, principalmente em relacao ao JWS que possui um classloader bizarro! Não consigo colocar o Lohis para rodar com ele. (Tentei durante dois dias!)
|
Sergio A Oliveira Jr. - saoj
ExperiMENTA:
Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/06/2005 16:12:58
|
Rodrigo Carvalho Auler
Virtual Machine Man
Membro desde: 14/02/2003 15:59:17
Mensagens: 576
Localização: Rio de Janeiro
Offline
|
saoj wrote:Concordo plenamente, principalmente em relacao ao JWS que possui um classloader bizarro! Não consigo colocar o Lohis para rodar com ele.  (Tentei durante dois dias!)
Que bom que não sou o único...
Mas sobre o Generics, eu ainda só usei pra estudo já que os servidores que eu uso deve demorar um pouco pra atualizar pro Java5... mas pelo pouco que eu usei a única vantagem que vi é de ser typesafe nas coleções. E ainda hoje me confundo com a sintaxe...
[]'s
Rodrigo
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/06/2005 17:57:53
|
marcioa1
Virtual Machine Man
![[Avatar]](/images/avatar/169779d3852b32ce8b1a1724dbf5217d.jpg)
Membro desde: 29/11/2003 12:52:10
Mensagens: 736
Localização: Valinhos-SP
Offline
|
Não tenho certeza, mas acho que a Sun quis simplificar, para ficar mais parecido com C#. A M$ sempre diz que faz o mesmo com menos comandos ( linhas ) e talvez isto também tenha inspirado o aparecimento de Generics.
Mas quem não gosta, não precisa usar. Eu uso.
Márcio
|
SCJP 1.4, |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/06/2005 18:11:19
|
vamorim
JavaEvangelist
![[Avatar]](/images/avatar/bd5af7cd922fd2603be4ee3dc43b0b77.jpg)
Membro desde: 21/11/2003 17:08:39
Mensagens: 481
Localização: Rio de Janeiro - RJ
Offline
|
marcioa1 wrote: Não tenho certeza, mas acho que a Sun quis simplificar, para ficar mais parecido com C#. A M$ sempre diz que faz o mesmo com menos comandos ( linhas ) e talvez isto também tenha inspirado o aparecimento de Generics.
Mas quem não gosta, não precisa usar. Eu uso.
Márcio
Essa história que quem não gosta não precisa usar é meio fraca. Você pode não usar no código que você cria, mas é obrigado a conhecer quando vai fazer manutenção... Ou seja, já que existe não pode-se simplesmente ignorar a sua existência.
O mesmo vale para o do/while e tantas outras redundâncias existentes.
Sempre que se cria mais uma forma mais simples de se fazer alguma coisa, aumentam-se as possibilidades. Logo, o profissional aumenta o volume de coisas a se estudar.
|
Vinci Pegoretti Amorim
http://vinci.blog.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/06/2005 18:12:45
|
Filipe Sabella
GUJ Expert
Membro desde: 12/03/2003 11:25:57
Mensagens: 4680
Offline
|
Bom, a sun não vai tirar. Então acostumemonos.
|
Former LIPE. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/06/2005 18:30:39
|
saoj
JWizard
![[Avatar]](/images/avatar/2e7ceec8361275c4e31fee5fe422740b.png)
Membro desde: 09/03/2004 23:34:46
Mensagens: 2667
Localização: Chicago, EUA
Offline
|
Se alguém pudesse responder as minhas perguntas seria legal.
Pelo menos não vou mais encher o saco aqui quando surgir outro post sobre isso.
|
Sergio A Oliveira Jr. - saoj
ExperiMENTA:
Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/06/2005 20:40:34
|
Mauricio Linhares
Moderador
![[Avatar]](/images/avatar/97af07a14cacba681feacf3012730892.jpg)
Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline
|
saoj wrote: 1) Qual é o valor prático de Generics, a não ser para pegar erro de cast no compile-time e para economizar casts por parte do programador? Falar que é para tornar a linguagem mais type-safe não ajuda! Qual é a vantagem de tornar o Java uma linguagem mais type-safe? Não tava bom do jeito que estava? O que tava ruim? Tem que colocar uma enquete do tipo: Quem aqui se incomodava de dar um cast nos objetos retornados de uma collection?
Nenhum, só serve pra o que você já disse, do mesmo jeito que o Phillip já disse. Eu acho interessante, mas não acho que seja uma feature que vai mudar a vida das pessoas.
O que eu acho é que alguém deveria matar as classes internas anônimas e criar delegates em Java. E sem sobrecarga de operadores, por favor, já tive dores de cabeça suficientes lendo documentação de C# pra descrobrir se o cara implementou a p#@$@ do método ou não.
saoj wrote: 2) Pra que serve generics a não ser para fazer retorno covariante? (Vide pergunta anterior para entender porque eu não entendo o benefício prático de retorno covariante.)
Generics e retornos covariantes são features independentes, um pode existir normalmente sem o outro.
Agora generics é uma coisa esquisita, melhorar a "segurança" dos tipos é uma coisa ótima para novatos, mas novatos não vao entender generics e os mais velhos normalmente não vão querer muito se preocupar com esse tipo de coisa...
|
Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr
Screencast de Introdução a linguagem Objective-C |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/06/2005 06:15:02
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline
|
Maurício Linhares wrote:
saoj wrote: 1) Qual é o valor prático de Generics, a não ser para pegar erro de cast no compile-time e para economizar casts por parte do programador?
Nenhum, só serve pra o que você já disse, do mesmo jeito que o Phillip já disse. Eu acho interessante, mas não acho que seja uma feature que vai mudar a vida das pessoas.
Epa, opa, pera la. Generics tornam muito mais explicito o que vc quer fazer com as colecoes. Isso eh um baita ponto positivo. Um exemplo: vejam o trecho de codigo abaixo e me digam se vcs sabem o que vai ter no HashMap mais pra frente:
Agora, com generics:
O codigo ficou maiorzinho, mas agora vc nao tem que ir atras do codigo que faz put() ou get() pra entender o que ta acontecendo ali. A melhoria de legibilidade eh bem significativa, talvez mais significativa que a economia dos casts (que, eu concordo, nao eh lah grande coisa).
Maurício Linhares wrote:O que eu acho é que alguém deveria matar as classes internas anônimas e criar delegates em Java. E sem sobrecarga de operadores, por favor, já tive dores de cabeça suficientes lendo documentação de C# pra descrobrir se o cara implementou a p#@$@ do método ou não.
Se vc tiver uma sugestao de como fazer isso sem quebrar a compatibilidade do codigo que ja existe hoje (e isso inclui o codigo da propria JDK), mantendo uma performance aceitavel, e sem inventar uma sintaxe bizarra, fique a vontade pra explicar direitinho, que eu mando pro pessoal aqui da ThoughtWorks que tah no JCP o mais rapido possivel
E, sobre a sobrecarga de operadores, so digo que vc precisa passar um tempo programando em Ruby
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/06/2005 16:43:54
|
louds
Moderador
![[Avatar]](/images/avatar/1e48c4420b7073bc11916c6c1de226bb.jpg)
Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline
|
Generic são uma boa evolução, mas o fato de ter erasure coloca Java no mesmo saco que C++, de linguagens fracamente tipadas, e isso é uma pena.
No final das contas é impossivel usar bytecode compilado com generics nas jvms antigas, isso matou metade da justificativa para ter erasure.
O problema de tipos paramétricos, sejam templates ou generics, é que eles passam a carregar muito mais informação, e isso é um inferno para linguagens com declaração explicita de tipos. Ainda bem que eles usaram um sistema de tipos simples, senão teriamos tipos com 200-300 caractéres facilmente.
Moral da história, Java possui um sistema de tipos muito fraco, e foi preciso usar de violência para acomodar generics. Não acho ruim, mas nunca pretendo passar de mero usuário (acho que nunca vou precisar criar tipos genéricos). Espero que parem por ai, uma linguagem com semântica mais rica, com coisas como inferência de tipos, nâo vai prestar se for um patch pro Java.
This message was edited 1 time. Last update was at 29/06/2005 16:44:18
|
http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda |
|
|
 |
|
|