Findbugs problème avec le “Boxing/unboxing pour analyser un primitif” avec Entier.valueOf(String)
J'ai ce bout de code:
public void someMethod(String id) {
someOtherMethod(Integer.valueOf(id));
}
public void someOtherMethod(int id) {
//do something with id
}
Et sur la deuxième ligne, Findbugs est de lancer cette exception:
Boxing/unboxing pour analyser une primitive
Pourquoi est Findbugs se plaindre à ce sujet quand je suis tout simplement en appelant Entier.valueOf() /comment puis-je résoudre ce problème?
Vous devez vous connecter pour publier un commentaire.
Le problème est que
Integer.valueOf
retourne unInteger
, pas unint
, mais votresomeOtherMethod
s'attend à uneint
. Findbugs est fondamentalement pour vous avertir que vous êtes en train de faire un long-winded manière qui implique potentiellement la création d'un objet (leInteger
) que vous n'avez pas besoin de qui vous êtes alors immédiatement va unbox en la passant àsomeOtherMethod(int)
, par exemple:Au lieu de cela, vous pouvez et devriez probablement éviter que inutile d'aller-retour à travers
Integer
et il suffit de faire:Il n'y a aucun besoin pour les temporaires
Integer
et le potentiel de l'allocation de mémoire et de tels qui l'entourent.Si
someOtherMethod
attendaient unInteger
, vous n'en aurez pas l'avertissement, parce que lesInteger
n'est pas purement temporaire.C'est juste un d'une classe de l'inutile-boxe-conversions de Findbugs et des outils comme il a obligeamment remarquer.
Il m'a fallu un certain temps pour comprendre que l'un (en partie parce que Jenkins a juste dit "Boxing/unboxing pour analyser un primitif"), mais apparemment, le problème /solution est dans ce Entier.valueOf() fait en interne, à savoir:
Donc la solution est de simplement appeler parseInt() directement à la place:
La description détaillée de la question (DM_BOXED_PRIMITIVE_FOR_PARSING) peuvent être trouvés sur le findbugs page.
parseInt
", sans une explication de pourquoi Findbugs est en pointant un problème.