Pessoal,
Instalei o PMD no Eclipse, a versão mais recente que tinha, e olhe só que esquisito:
Para este código:
Integer amount = new Integer(amountRegister);
Ele aponta este erro:
Isto esta estranho mesmo ou eu que não estou enxergando algo?
Pessoal,
Instalei o PMD no Eclipse, a versão mais recente que tinha, e olhe só que esquisito:
Para este código:
Integer amount = new Integer(amountRegister);
Ele aponta este erro:
Isto esta estranho mesmo ou eu que não estou enxergando algo?
Qual comportamento esquisito você está reparando? Você está instanciando um Integer e ele diz para não fazer isso.
Estou no JDK 1.4.2, e a variável amoutRegister é um int…
É 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.
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.
Sei não, einh.
A diferença entre fazer
Integer a = new Integer(0);
e fazer
é a mesma diferença entre fazer
String a = new String("Java");
e fazer
String a = "Java";
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”.
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.
Se eu não me engano, o Integer.valueOf() foi alterado para usar um flyweight para melhorar a performance do autoboxing.
Pessoal… acho que vocês estão se equivocando, o valueOf recebe uma String, não um int.
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)
[quote=David]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)[/quote]
Aparti do Java 5 só. http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Integer.html#valueOf(java.lang.String)
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:
int a = 4;
Integer b = Integer.valueOf( "" + a);
só para “agradar” ao pmd…
:shock:
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:
int ultimoDigito = valor % 10; // o PMD, ou Checkstyle, não sei, vai reclamar
em vez disso usar isto, que é altamente críptico:
int ultimoDigito = valor % '\n'; // fica mudo e calado
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.
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).
Você garante que o sistema funciona no Java 5?
Uh?
Só funcionará no 5.
Não fui bem claro:
Você garante que o sistema já desenvolvido garante no Java 1.5?
[quote=microfilo]Não fui bem claro:
Você garante que o sistema já desenvolvido garante no Java 1.5?[/quote]
Agora você não foi nem um pouco claro
Pelo contexto eu imagino que sua pergutna seria: você garante que seu sistema funcionaria no Java 5?
Não sem passar por QA. A diferença é que não há nenhuma alteração nos fontes para,t eoricamente, funcionar no Java 5, então a qualquer momento a migração pode ser feita, com custo apenas de teste e evetual correção.
Utilizando técnicas que dificultam a migração temos o esforço inicial de fazer o sistema mesmo compilar em Java 5.