java findbugs boxing unboxing

java - El problema de Findbugs con "Boxeo/Unboxing para analizar una primitiva" con Integer.valueOf(String)



(2)

El problema es que Integer.valueOf devuelve un Integer , no un int , pero tu someOtherMethod espera un int . Findbugs básicamente te advierte que lo estás haciendo de una manera prolongada que implica potencialmente crear un objeto (el Integer ) que no necesitas, que luego vas a desempaquetar pasándolo a someOtherMethod(int) , p.ej:

String => int => Integer => int ^^^^^^^^^^^^^^ /--- This is inside Integer.valueOf

En su lugar, puede y probablemente debería evitar ese viaje de ida y vuelta innecesario a través de Integer y simplemente haga:

String => int ^^^^^^^^^^^^^ /--- Integer.parseInt

Simplemente no hay necesidad del Integer temporal y la posible asignación de memoria y todo lo que lo rodea.

Si someOtherMethod estuviera esperando un Integer , no recibiría la advertencia, porque el Integer no es puramente temporal.

Esta es solo una de las clases de conversiones de boxeo innecesarias que Findbugs y las herramientas como esta indican de manera útil.

Tengo este pedazo de código:

public void someMethod(String id) { someOtherMethod(Integer.valueOf(id)); } public void someOtherMethod(int id) { // do something with id }

Y en esa segunda línea, Findbugs está lanzando esta excepción:

Boxeo / Unboxing para analizar un primitivo

¿Por qué se está quejando Findbugs de esto cuando simplemente llamo a Integer.valueOf () / cómo puedo solucionarlo?


Me tomó un tiempo darme cuenta de eso (en parte porque Jenkins acaba de decir "Boxeo / Unboxing para analizar un primitivo"), pero aparentemente el problema / solución está en lo que Integer.valueOf () hace internamente, a saber:

Integer.valueOf(parseInt(s, 10));

Entonces la solución es simplemente llamar a parseInt () directamente en su lugar:

someOtherMethod(Integer.parseInt(id));

La descripción detallada del problema (DM_BOXED_PRIMITIVE_FOR_PARSING) se puede encontrar en la página de findbugs .