| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/07/2006 16:49:35
|
Rubem Azenha
GUJ Master
![[Avatar]](/images/avatar/cb953f6ca5923f7517125db46ed1293d.jpg)
Membro desde: 28/06/2004 00:10:43
Mensagens: 1933
Localização: São Paulo, SP
Offline
|
Pessoal,
Instalei o PMD no Eclipse, a versão mais recente que tinha, e olhe só que esquisito:
Para este código:
Ele aponta este erro:
PMD wrote:
Avoid instantiating Integer objects. Call Integer.valueOf() instead
Isto esta estranho mesmo ou eu que não estou enxergando algo?
|
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/07/2006 17:10:24
|
pcalcado
Moderador
![[Avatar]](/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg)
Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline
|
Qual comportamento esquisito você está reparando? Você está instanciando um Integer e ele diz para não fazer isso.
Site do PMD wrote:
IntegerInstantiation: In JDK 1.5, calling new Integer() causes memory allocation. Integer.valueOf() is more memory friendly.
http://pmd.sourceforge.net/rules/index.html
|
Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/07/2006 17:49:48
|
Rubem Azenha
GUJ Master
![[Avatar]](/images/avatar/cb953f6ca5923f7517125db46ed1293d.jpg)
Membro desde: 28/06/2004 00:10:43
Mensagens: 1933
Localização: São Paulo, SP
Offline
|
Estou no JDK 1.4.2, e a variável amoutRegister é um int...
|
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/07/2006 17:58:45
|
pcalcado
Moderador
![[Avatar]](/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg)
Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline
|
É uma regra de migração, quer dizer que vai tornar mais fácil migrar pra Java 5. Lleia a documentação do PMD. de qualquer modo você pode desativar a regra.
Ah, e o fato de ser um int não elimina o fato de você estar instanciando um Integer, seja com um int ou com qualquer coisa.
|
Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/07/2006 22:39:18
|
Rubem Azenha
GUJ Master
![[Avatar]](/images/avatar/cb953f6ca5923f7517125db46ed1293d.jpg)
Membro desde: 28/06/2004 00:10:43
Mensagens: 1933
Localização: São Paulo, SP
Offline
|
Hum... acho que por isso que o pessoal aqui tem um ruleset definido
O fato é que neste caso não tem como evitar, vou ter que instanciar o Integer.
Vou desativar essa regra.
|
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/07/2006 22:59:17
|
plentz
Moderador
![[Avatar]](/images/avatar/73f490f3f868edbcd80b5d3f7cedc403.png)
Membro desde: 28/01/2004 07:34:12
Mensagens: 1584
Localização: Porto Alegre, RS
Offline
|
microfilo wrote:O fato é que neste caso não tem como evitar, vou ter que instanciar o Integer.
Sei não, einh.
|
Diego Plentz - Twitter
"Provide options, don't make lame excuses." |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/07/2006 00:58:09
|
Daniel Quirino Oliveira
Moderador
![[Avatar]](/images/avatar/846c260d715e5b854ffad5f70a516c88.png)
Membro desde: 23/03/2003 23:57:34
Mensagens: 3299
Localização: Awawawawa (Araraquara) - SP
Offline
|
A diferença entre fazer
e fazer
é a mesma diferença entre fazer
e fazer
No primeiro caso, você aloca um novo objeto em memória (duhhh!) com um determinado valor associado (0/"Java"). Para o segundo caso, a JVM faz um poolzinho, fazendo com que o valor associado ao novo objeto seja reaproveitado a partir do valor de um outro objeto equivalente, e por isso o mala do PMD considera esta prática mais "memory friendly".
|
Daniel Quirino Oliveira |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/07/2006 01:38:20
|
Fabricio Cozer Martins
GUJ Ranger
![[Avatar]](/images/avatar/2ecd2bd94734e5dd392d8678bc64cdab.jpg)
Membro desde: 08/05/2004 10:22:03
Mensagens: 935
Localização: Salvador/Brasil
Offline
|
Também concordo,
fazer isso Integer.valueOf(0); um bilhão de vezes é mais performático
que criar um novo objeto na memória new Integer(0); já que as duas formas de obter um integer tem a mesma representação semântica.
|
Fabrício Cozer Martins
Analista de Sistemas
Bacharel em Ciência da Computação da UFBa
Sun Certified Programmer for Java 2 Platform 1.4
Sun Certified Web Component Developer for J2EE 1.4 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/07/2006 03:11:47
|
AllMighty
Java Ninja
![[Avatar]](/images/avatar/c900197841211ba608f56.gif)
Membro desde: 16/08/2004 17:21:42
Mensagens: 266
Localização: São Paulo
Offline
|
Se eu não me engano, o Integer.valueOf() foi alterado para usar um flyweight para melhorar a performance do autoboxing.
|
Rafael de F. Ferreira
Blog: http://www.rafaelferreira.net/
Links miscelâneos: http://stoa.usp.br/rafaelferreira |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/07/2006 08:11:26
|
Anonymous
|
Pessoal... acho que vocês estão se equivocando, o valueOf recebe uma String, não um int.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/07/2006 09:15:30
|
David
JavaEvangelist
![[Avatar]](/images/avatar/77431ca7981f1f1483ae8a58bcbb6e0e.jpg)
Membro desde: 18/03/2005 13:10:33
Mensagens: 450
Localização: Natal/RN
Offline
|
O valueOf() aceita tanto uma String quanto um int.
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Integer.html#valueOf(int)
|
David Pereira
Engenheiro de Computação - UFRN
Mestre em Engenharia Elétrica
Doutorando em Engenharia Elétrica |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/07/2006 10:29:20
|
juzepeleteiro
Virtual Machine Man
Membro desde: 19/07/2005 16:01:40
Mensagens: 583
Localização: Rio de Janeiro
Offline
|
Aparti do Java 5 só. http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Integer.html#valueOf(java.lang.String)
|
http://ofert.as - Cupons de desconto |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/07/2006 10:52:54
|
chicobento
JavaGuru
![[Avatar]](/images/avatar/c8e721e640e463f34fdd4.gif)
Membro desde: 14/06/2004 01:44:04
Mensagens: 226
Localização: Campinas
Offline
|
Tive esse mesmo problema e a solução foi desabilitar essa regra.
No JDK 1.4 se vc tem um int e quer um Integer o único modo de fazer isso é esse.
No meu caso ainda tinha aquele cara que defende o pmd tentando me convencer que o ideal seria:
só para "agradar" ao pmd...
|
SCEA 5 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/07/2006 10:57:20
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
chicobento wrote:
No meu caso ainda tinha aquele cara que defende o pmd tentando me convencer que o ideal seria:
só para "agradar" ao pmd...
Que nojo... É igual àquela regra dos "números mágicos". Dá para enganar essa regra para números entre 4 e 65535, usando caracteres em Unicode:
em vez disso usar isto, que é altamente críptico:
Enganar regras do PMD ou Checkstyle é possível, mas torna os programas ininteligíveis. É melhor desabilitar algumas regras, já que o que se quer é algo que as pessoas possam entender.
|
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/07/2006 11:18:06
|
pcalcado
Moderador
![[Avatar]](/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg)
Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline
|
Não é melhor se preparar pra uma migração?
Já trabalhei num sistema cuko único empecilho para não migrar era o fato de que alguém usou enum como identificador em 99% dos fontes (sim, era um sistema mal feito pra cacete) e nenhum projeto ia querer bancar o processo de alteração e de teste integral do sistema (que durava uns dois meses).
|
Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay |
|
|
 |
|
|