Comment générer cette valeur dans IntelliJ IDEA?
Je vais dans Paramètres -> Erreurs -> Problèmes de sérialisation -> Classe sérialisable sans 'serialVersionUID', mais il ne me montre toujours pas l'avertissement. Ma classe PKladrBuilding parent implémente l' interface Serializable .
Une partie du code:
public class PKladrBuilding extends PRQObject
public abstract class PRQObject extends PObject
public abstract class PObject implements Serializable
java
serialization
intellij-idea
Kirill Bazarov
la source
la source
1L
exemple votre ID et incrémenter lorsque votre formulaire sérialisé change. (Voir stackoverflow.com/questions/888335/… ).Réponses:
Je ne sais pas si vous avez une ancienne version d'IntelliJ IDEA, mais si je vais dans le menu Fichier → Paramètres ... → Inspections → Problèmes de sérialisation → Classe sérialisable sans 'serialVersionUID'` activée, la classe que vous fournissez me donne des avertissements.
Si j'essaie le premier cours, je vois:
BTW: Il ne m'a pas montré d'avertissement jusqu'à ce que j'ajoute
{ }
à la fin de chaque classe pour corriger l'erreur de compilation.la source
File
|Invalidate Caches
, si cela n'aide pas, contactez [email protected] avec un exemple de projet à reproduire.idea.log
(Aide | Révéler la connexion ...) pour les exceptions, le répertoire personnel chiffré sous Linux est connu pour causer des problèmes en raison du bogue du noyau .Installez le plugin GenerateSerialVersionUID par Olivier Descout.
Accédez à: menu Fichier → Paramètres → Plugins → Parcourir les référentiels →
GenerateSerialVersionUID
Installez le plugin et redémarrez.
Vous pouvez maintenant générer l'identifiant à partir du menu Code → Générer → serialVersionUID` ou le raccourci.
la source
Sans aucun plugin: il vous suffit d'activer la mise en évidence dans IntelliJ:
IntelliJ Preferences -> Editor -> Inspections -> Java -> Serialization issues -> Serializable class without 'serialVersionUID'
- définir le drapeau et cliquer'OK'
.Maintenant, si votre classe implémente
Serializable
, vous verrez le surlignage etalt+Enter
le nom de la classe proposera de générerprivate static final long serialVersionUID
.PS: Pris d' ici
la source
Après avoir passé un certain temps sur la sérialisation, je trouve que nous ne devons pas générer
serialVersionUID
avec une valeur aléatoire, nous devons lui donner une valeur significative.Voici un commentaire détaillé à ce sujet. J'adopte le commentaire ici.
J'espère que cela t'aides. Bonne chance.
la source
serialVersionUID
avec un nouveau nombre aléatoire lorsque je ne veux pas prendre en charge les anciennes versions sur la désérialisation. Je n'ai peut-être pas besoin d'utiliser des nombres aléatoires, mais je peux commencer par 1 et l'incrémenter. Cependant,3L
cela n'a plus de sens pour moi-3518231192373568183L
. Par conséquent, je suppose que les deux solutions fonctionnent de manière similaire. Le nombre aléatoire pourrait cependant avoir l'avantage de fonctionner sur des histoires non linéaires avec des fourches et des branches.Afin de générer la valeur d'utilisation
et fournissez la variable de modèle randomLong avec la valeur suivante: groovyScript ("new Random (). nextLong (). abs ()")
https://pharsfalvi.wordpress.com/2015/03/18/adding-serialversionuid-in-idea/
la source
De plus, vous pouvez ajouter un modèle en direct qui fera le travail.
Pour ce faire, appuyez sur Ctrl+Alt+S->
"Live Templates"
section ->other
(ou w / e que vous souhaitez)Et puis créez-en un nouveau avec une définition comme celle-ci:
Sélectionnez ensuite la
definition
portée et enregistrez-la sous'serial'
Vous pouvez maintenant saisir le
serial
TABcorps de la classe.la source
Une autre façon de générer le serialVersionUID est d'utiliser à
>Analyze >Run Inspection by Name
partir du menu contextuel (ou du raccourci clavier, qui est ctrl+ alt+ shift+ ipar défaut), puis de taper "Classe sérialisable sans 'serialVersionUID'" (ou simplement de taper "serialVersionUID" et le type à venir la fonction le trouvera pour vous.Vous obtiendrez alors un menu contextuel où vous pourrez choisir où exécuter les inspections (par exemple, tous à partir d'un module spécifique, d'un projet entier, d'un fichier, ...)
Avec cette approche, vous n'avez même pas besoin de définir les règles générales d'inspection.
la source
Avec version
v2018.2.1
Aller à
Un avertissement doit apparaître à côté de la déclaration de classe.
la source
J'utilise Android Studio 2.1 et j'ai une meilleure cohérence pour obtenir l'ampoule en cliquant sur le nom de la classe et en la survolant pendant une seconde.
la source
Ajoutez un modèle en direct appelé "ser" à l'autre groupe, définissez-le sur "Applicable en Java: déclaration" et décochez "Raccourcir les noms FQ". Donnez-lui un modèle de texte juste:
Maintenant, éditez les variables et définissez série sur:
Il suppose la disposition standard du projet Gradle. Changez / build / en / target / pour Maven.
la source
Méthode moderne la plus simple:
Alt
+Enter
activéeIntelliJ soulignera l'espace après le
=
. placez votre curseur dessus et appuyez suralt
+Enter
(Option
+Enter
sur Mac). Vous obtiendrez un popover qui dit "Changer au hasard l'initialiseur serialVersionUID". Appuyez simplement sur Entrée, et cela remplira cet espace avec une longue aléatoire.la source
Si vous souhaitez ajouter le serialVersionUID absent pour un tas de fichiers, IntelliJ IDEA peut ne pas fonctionner très bien. Je propose un script simple pour atteindre facilement cet objectif:
Vous enregistrez ce script, dites comme
add_serialVersionUID.sh
dans votre~/bin
dossier. Ensuite, vous l'exécutez dans le répertoire racine de votre projet Maven ou Gradle comme:Ce .lst inclut la liste des fichiers Java pour ajouter le serialVersionUID au format suivant:
Ce script utilise l'outil JDK serialVer. Il est idéal dans une situation où vous souhaitez modifier un grand nombre de classes qui n'avaient pas défini serialVersionUID en premier lieu tout en conservant la compatibilité avec les anciennes classes.
la source