PMD Maluco...  XML
Índice dos Fóruns » Arquitetura de Sistemas
Autor Mensagem
Rubem Azenha
GUJ Master
[Avatar]

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
[WWW]
pcalcado
Moderador
[Avatar]

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
[Email] [WWW] [Yahoo!] [MSN]
Rubem Azenha
GUJ Master
[Avatar]

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
[WWW]
pcalcado
Moderador
[Avatar]

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
[Email] [WWW] [Yahoo!] [MSN]
Rubem Azenha
GUJ Master
[Avatar]

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
[WWW]
plentz
Moderador
[Avatar]

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."
[Email] [WWW]
Daniel Quirino Oliveira
Moderador
[Avatar]

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
[Email] [WWW]
Fabricio Cozer Martins
GUJ Ranger
[Avatar]

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
[MSN] [ICQ]
AllMighty
Java Ninja
[Avatar]

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
[Email] [WWW] [MSN] [ICQ]
Anonymous



Pessoal... acho que vocês estão se equivocando, o valueOf recebe uma String, não um int.
David
JavaEvangelist
[Avatar]

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
[WWW]
juzepeleteiro
Virtual Machine Man

Membro desde: 19/07/2005 16:01:40
Mensagens: 583
Localização: Rio de Janeiro
Offline

David wrote: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)


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
[Email] [WWW] [MSN]
chicobento
JavaGuru
[Avatar]

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
[MSN]
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.


[WWW]
pcalcado
Moderador
[Avatar]

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
[Email] [WWW] [Yahoo!] [MSN]
 
Índice dos Fóruns » Arquitetura de Sistemas
Ir para:   
Powered by JForum 2.1.8 © JForum Team