Lorsque vous étendez une classe avec la classe Exception (pour créer une nouvelle exception), vous obtenez un avertissement pour avoir un serialVersionUID
. Je sais que serialVersionUID
joue un rôle important lors de la sérialisation et de la désérialisation, mais quand mon exception doit être sérialisée? Quelqu'un peut-il me donner un cas pratique dans lequel je veux que ma classe d'exception personnalisée ait la sérialisation et la désérialisation?
En effet, la classe racine de toutes les exceptions, Throwable
implémente l'interface Serializable
. Toutes les exceptions par défaut sont sérialisables et c'est une décision de conception de langage parce que les auteurs voulaient que les exceptions puissent être envoyées sur le fil sans aucune configuration spéciale.
Si la classe de base n'est pas sérialisable, vous aurez du mal à transmettre ce qui s'est exactement passé en cas d'échec d'une méthode distante, car vous n'auriez aucun contrôle sur les types d'exceptions intégrés.
Si votre exception personnalisée est déjà utilisée dans une application distribuée (à l'aide de RMI, Spring http-invoker, peu importe) et peut être levée à partir d'une méthode serveur qui est invoquée à partir d'un client distant, alors l'exception devra être sérialisée pour traverser le fil et allez chez le client.
Vos seules options sont de définir serialVersionUID
pour chaque Exception
type que vous définissez (le IDE peut le générer pour vous) ou de supprimer l'avertissement.
Vous pouvez trouver ma question précédente serialVersionUID explicite considéré comme dangereux? pertinent.