web-dev-qa-db-fra.com

Pourquoi SonarQube génère-t-il une erreur transitoire / privée lorsque la classe est sérialisée?

J'ai une classe Java qui implémente sérialisable et je suppose que la variable au sein de la classe serait également sérialisée mais SonarQube se plaint de ne pas l'être.

Mon extrait de code est illustré ci-dessous:

SonarQube Error

10
koala421

SonarQube a marqué cette ligne comme une erreur, car Java.util.List n'implémente pas Java.io.Serializable . Java.util.ArrayList est sérialisable, mais le bondAxeMarkQuoteUpdates est protected pour que quelqu'un puisse lui assigner une autre liste non sérialisable (par exemple dans une sous-classe).

Pour résoudre le problème, vous pouvez:

  1. faire le champ comme transient, mais il sera ignoré lors de la sérialisation
  2. faire le champ comme private, afin que SonarQube puisse vérifier que personne ne lui a attribué de liste non sérialisable
  3. changer le type de champ en type sérialisable (par exemple Java.util.ArrayList )
9
agabrys

Je reçois la même erreur et la solution était de transformer la classe utilisée sur la variable en Serializable.

Par exemple, cela affiche une erreur car Object n'est pas Serializable:

private Map<String, Object> map = new HashMap<>();

La solution la plus simple dans ce cas était d'activer le deuxième paramètre Serializable. Vous pouvez donc utiliser:

private Map<String, Serializable> map = new HashMap<>();

Si vous utilisez votre propre classe (au lieu de Object), vous pouvez mettre la classe sur implements Serializable.

8
Dherik