Comment générer l'UID de la version série dans Intellij


126

Lorsque j'ai utilisé Eclipse, il avait une fonctionnalité intéressante pour générer l'UID de la version série.

Mais que faire dans IntelliJ?

Comment choisir ou générer un UID de version série identique dans IntelliJ?

Et que faire lorsque vous modifiez l'ancienne classe?

Si vous n'avez pas spécifié le id, il est généré au moment de l'exécution ...



@JFIB La constante de classe serialVersionUIDest générée par le compilateur lorsqu'elle n'est pas spécifiée. La spécification a l'avantage (et le danger) de garder l'identifiant identique pour les versions de classe modifiées. C'est-à-dire qu'un fichier avec un objet de l'ancienne version sera lu (désérialisé) avec la nouvelle version ou vice versa.
Joop Eggen le

Réponses:


304

Sans aucun plug-in:

Il vous suffit d'activer la mise en évidence: (Idée v.2016, 2017 et 2018, les versions précédentes peuvent avoir des paramètres identiques ou similaires)

Fichier -> Paramètres -> Editeur -> Inspections -> Java -> Problèmes de sérialisation -> Classe sérialisable sans 'serialVersionUID' - définissez l'indicateur et cliquez sur 'OK'. (Pour les Mac, les paramètres sont sous IntelliJ IDEA -> Préférences ...)

Maintenant, si votre classe implémente Serializable, vous verrez surligner et alt + Entrée sur le nom de la classe proposera de générer private static final long serialVersionUID.

UPD: un moyen plus rapide de trouver ce paramètre - vous pouvez utiliser le raccourci clavier Ctrl+Shift+A(action de recherche), tapez Serializable class without 'serialVersionUID'- le premier est celui.


2
@SalilJunior Pas vraiment. La capacité intégrée de générer un serialVersionUID est liée aux avertissements d'inspection. Vous êtes bloqué lorsque vous ne souhaitez pas activer l'avertissement d'inspection mais générer serialVersionUID dans certains cas.
Fabian Barney

Cette solution ne fonctionne pas pour moi, je ne peux voir que les options: supprimer l'implémentation parcelable, remplacer l'implémentation parcelable, créer un test, créer une sous-classe et rendre le package privé. La classe que j'utilise implémente Parcelable et Serializable en même temps. Une idée?
gonver

Avez-vous vérifié que l'indicateur nécessaire est défini dans les paramètres ci-dessus? Testé à la fois dans l'idée v16 et v17, fonctionne très bien. Vérifiez également les paramètres supplémentaires pour une telle inspection après avoir cliqué dessus dans la fenêtre des paramètres (à droite).
Serhii Maksymchuk

Je ne savais pas cela et trouvais très utile.
Chaklader Asfak Arefe

62

Méthode la plus simple: Alt+ Entersur

private static final long serialVersionUID = ;

IntelliJ soulignera l'espace après le =. placez votre curseur dessus et appuyez sur alt+ Enter( Option+ Entersur Mac). Vous obtiendrez un popover qui dit "Changer de manière aléatoire l'initialiseur serialVersionUID". Appuyez simplement sur Entrée, et il remplira cet espace avec un long aléatoire.


Merci a travaillé pour moi dans IntelliJ IDEA Community Edition version 2018.3.3
Tarun

Il est également conseillé dans la documentation Java d'utiliser un modificateur privé lorsque cela est possible. docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/…
Ilya Lozinsky

2
Meilleure réponse à celle ci-dessus.
Akin Okegbile

32

Installer le plugin GenerateSerialVersionUID


2
Pourquoi installer un plugin alors que cela peut être facilement fait comme le montre @Serhii ci-dessous.
shaz

2
@shaz Je préfère quand cette inspection est désactivée, mais pour certaines classes, obtenir un serialVersionUID explicite est requis. Je ne veux pas d'inspection distrayante sur chaque classe alors que j'ai besoin de serialVersionUID pour une seule.
Timofey

1
Je pense que le plugin aide à générer des valeurs pour les sous-classes où la classe parente est également sérialisable et contient un fichier serialVersionUID. Cela prend en charge le cas où vous avez mis à jour la classe enfant et devez générer un nouveau serialVersionUID pour cette classe sans changer le serialVersionUID de la classe parent (dans les cas où aucune modification n'a été apportée à la classe parent).
kapad

Bien que cela puisse répondre à la question, il est préférable de fournir les informations réelles ici et pas seulement un lien. Les réponses aux liens uniquement ne sont pas considérées comme de bonnes réponses et seront probablement supprimées .
elixenide

3
@EdCottrell Il n'y a aucune autre information à fournir. Utilisez le plugin ou non.
Meo

2

Plugins IntelliJ IDEA / GenerateSerialVersionUID https://plugins.jetbrains.com/plugin/?idea&id=185

très agréable, très facile à installer. vous pouvez l'installer à partir du menu des plugins, sélectionnez installer à partir du disque, sélectionnez le fichier jar que vous avez décompressé dans le dossier lib. redémarrez, contrôlez + ins, et il apparaît pour générer l'UID série à partir du menu. aimer. :-)


0

avec dans l'éditeur de code, ouvrez la classe pour laquelle vous souhaitez créer l'UID, faites un clic droit -> Générer -> SerialVersionUID. Vous devrez peut-être installer le plugin GenerateSerialVersionUID pour que cela fonctionne.


1
comment pensez-vous que votre réponse ajoute quelque chose de nouveau pour résoudre ce problème? Si la réponse n'est pas, éliminez simplement votre réponse, car elle est inutile.
nazar_art

après l'ajout du plugin, certains peuvent être confus sur la façon de générer réellement l'UID. Voilà ce qui est ajouté.
mykey

1
Je suppose qu'ils peuvent lire la page de manuel de ce plugin. Votre réponse est évidente.
nazar_art
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.