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 ...

nazar_art
la source
1
Duplicata de stackoverflow.com/questions/12912287/…
Bruno Volpato
@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.

Serhii Maksymchuk
la source
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.

jeremysprofile
la source
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

Meo
la source
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. :-)

Rythme des patchs
la source
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.

ma clé
la source
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