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 .