IntelliJ IDEA generiert serialVersionUID

Lesezeit: 6 Minuten

Benutzer-Avatar
Kirill Basarow

Wie generieren Sie diesen Wert in IntelliJ IDEA?

ich gehe zu Einstellungen -> Fehler -> Serialisierungsprobleme -> Serialisierbare Klasse ohne ‘serialVersionUID’, aber die Warnung wird mir immer noch nicht angezeigt. Meine übergeordnete Klasse PKladrBuilding implementiert Schnittstelle Serialisierbar.

Teil des Codes:

public class PKladrBuilding extends PRQObject

public abstract class PRQObject extends PObject

public abstract class PObject implements Serializable

  • Sind Sie sicher, dass Sie einen Wert generieren müssen, anstatt Ihren eigenen zu definieren? Wenn Sie eine neue Klasse erstellen, würde ich empfehlen, dass Sie zB definieren 1L als Ihre ID und inkrementieren, wenn sich Ihr serialisiertes Formular ändert. (Siehe stackoverflow.com/questions/888335/…).

    – Duncan Jones

    16. Oktober 2012 um 10:15 Uhr

  • stackoverflow.com/questions/24573643/… hat eine sehr gute Lösung.

    – Pankaj Kumar

    27. Dezember 2016 um 7:06 Uhr

Benutzer-Avatar
Peter Lawrey

Ich bin mir nicht sicher, ob Sie eine alte Version von IntelliJ IDEA haben, aber wenn ich zum Menü gehe DateiEinstellungen…InspektionenSerialisierungsprobleme → Serialisierbare Klasse ohne ‘serialVersionUID’ aktiviert, die von Ihnen bereitgestellte Klasse gibt mir Warnungen.

Geben Sie hier die Bildbeschreibung ein

Wenn ich die erste Klasse versuche, sehe ich:

Geben Sie hier die Bildbeschreibung ein

Übrigens: Es hat mir keine Warnung angezeigt, bis ich hinzugefügt habe { } am Ende jeder Klasse, um den Kompilierungsfehler zu beheben.

  • Versuchen File | Invalidate Cacheswenn es nicht hilft, wenden Sie sich mit einem Beispielprojekt zur Reproduktion an [email protected].

    – CrazyCoder

    16. Oktober 2012 um 10:19 Uhr

  • Prüfen idea.log (Hilfe | Login anzeigen …) für Ausnahmen, verschlüsseltes Home-Verzeichnis unter Linux ist dafür bekannt, dass es Probleme verursacht Kernel-Fehler.

    – CrazyCoder

    16. Oktober 2012 um 10:53 Uhr

  • Ich habe dort viele Ausnahmen … wie java.lang.NoClassDefFoundError: org/intellij/lang/annotations/MagicConstant;

    – Kirill Basarow

    16. Oktober 2012 um 10:58 Uhr

  • Ich habe IDEA neu installiert und Plug-Ins entfernt und es hilft mir. Vielen Dank.

    – Kirill Basarow

    16. Oktober 2012 um 12:10 Uhr

  • Die Art und Weise, wie ich es in v15 zum Laufen gebracht habe, besteht darin, den Mauszeiger über den Klassennamen zu bewegen, um die Warnung zu sehen, und meine Maus langsam in Richtung der Rinne zu bewegen. An diesem Punkt erscheint die “Glühbirne” auf dem Bildschirm. (Versuchen Sie dies ein paar Mal, wenn es beim ersten Mal nicht wie beabsichtigt funktioniert). Dann können Sie auf die Option Feld erstellen klicken, um die UID zu erstellen. Hoffe, das hilft Leuten, die daran hängen bleiben.

    – Niyaz

    14. Januar 2016 um 22:11 Uhr


Benutzer-Avatar
Sileria

Installiere das GenerateSerialVersionUID Plugin von Olivier Descout.

Gehen Sie zu: Menü DateiEinstellungenPluginsRepositories durchsuchenGenerateSerialVersionUID

Installiere das Plugin und starte neu.

Jetzt können Sie die ID aus dem Menü generieren CodeGenerieren → serialVersionUID` oder die Abkürzung.

  • Sollte man wirklich ein externes Plugin benötigen, um dies zum Laufen zu bringen?

    – H.Rabiee

    30. Mai 2014 um 21:34 Uhr

  • Ja, Sie benötigen ein Plugin, das bereits Teil des IntelliJ-Plugin-Repositorys ist.

    – Sileria

    13. Juni 2014 um 17:09 Uhr

  • Zeitüberschreitung für mich bei Android Studio

    – Laurent Russier

    24. September 2015 um 8:15 Uhr

  • Funktioniert in 2017.3.4 – Mir ist aufgefallen, dass Sie keine serialVersionUID generieren konnten, wenn sie in einer Basisklasse definiert wurde (obwohl sie privat statisch ist und in diesem Sinne keine Rolle spielen sollte). Dieses Plugin bot nur die Option und funktioniert. Nett.

    – Stefan Hendriks

    6. Februar 2018 um 14:57 Uhr

  • Die Antwort ist richtig, aber ein Plugin, das alle paar Hauptversionen kaputt geht, ist nicht so gut wie die Verwendung der ebenfalls hier geposteten internen Lösung.

    – Hannes Schneidermayer

    17. September 2018 um 13:37 Uhr

Benutzer-Avatar
Nikhil Katre

Ohne Plugins: Sie müssen nur die Hervorhebung in IntelliJ aktivieren:

IntelliJ Preferences -> Editor -> Inspections -> Java -> Serialization issues -> Serializable class without 'serialVersionUID' – Flag setzen und klicken 'OK'.

Nun, wenn Ihre Klasse implementiert SerializableSie werden Hervorhebungen und sehen alt+Enter auf Klassenname wird vorschlagen, zu generieren private static final long serialVersionUID.

PS: Von hier übernommen

  • Vielen Dank. Ich weiß nicht, warum ich die Glühbirne nicht sehe, aber auf den Klassennamen zu klicken und Alt-Enter einzugeben, reicht aus.

    – Johannes S

    10. September 2018 um 16:51 Uhr

  • Antwort wird von hier gestohlen

    – Serhij Maksymchuk

    21. Februar 2019 um 10:11 Uhr

  • das ist aktueller

    – Christian Matthäus

    11. Juni 2019 um 18:44 Uhr

Nachdem ich einige Zeit mit der Serialisierung verbracht habe, finde ich, dass wir nicht generieren sollten serialVersionUID mit einem zufälligen Wert sollten wir ihm einen aussagekräftigen Wert geben.

Hier ist ein ausführlicher Kommentar dazu. Ich schließe den Kommentar hier ab.

Eigentlich sollten Sie keine Serienversions-UIDs “generieren”. Es ist ein dummes “Feature”, das aus dem allgemeinen Missverständnis darüber stammt, wie diese ID von Java verwendet wird. Sie sollten diesen IDs aussagekräftige, lesbare Werte geben, z. B. beginnend mit 1L, und sie jedes Mal erhöhen, wenn Sie glauben, dass die neue Version der Klasse alle früheren Versionen (die möglicherweise zuvor serialisiert wurden) obsolet machen sollte. Alle Dienstprogramme, die solche IDs generieren, tun im Grunde das, was die JVM tut, wenn die ID nicht definiert ist: Sie generieren den Wert basierend auf dem Inhalt der Klassendatei und erzeugen daher unlesbare, bedeutungslose lange Ganzzahlen. Wenn Sie möchten, dass jede einzelne Version Ihrer Klasse (in den Augen der JVM) unterschiedlich ist, sollten Sie nicht einmal den serialVersionUID-Wert angeben, da die JVM im laufenden Betrieb einen erzeugt und der Wert jeder Version Ihrer Klasse dies tut einzigartig sein. Der Zweck der expliziten Definition dieses Werts besteht darin, den Serialisierungsmechanismus anzuweisen, verschiedene Versionen der Klasse mit derselben SVUID so zu behandeln, als ob sie gleich wären, z. B. die älteren serialisierten Versionen nicht abzulehnen. Wenn Sie also die ID definieren und nie ändern (und ich nehme an, dass Sie das tun, da Sie sich auf die automatische Generierung verlassen und Ihre IDs wahrscheinlich nie neu generieren), stellen Sie sicher, dass alle – sogar absolut unterschiedliche – Versionen von Ihre Klasse wird vom Serialisierungsmechanismus als gleich angesehen. Ist es das was du willst? Wenn nicht, und wenn Sie tatsächlich die Kontrolle darüber haben möchten, wie Ihre Objekte erkannt werden, sollten Sie einfache Werte verwenden, die Sie selbst verstehen und leicht aktualisieren können, wenn Sie entscheiden, dass sich die Klasse erheblich geändert hat. Ein 23-stelliger Wert hilft überhaupt nicht.

Hoffe das hilft. Viel Glück.

Um den Nutzen zu generieren

private static final long serialVersionUID = $randomLong$L;
$END$

und geben Sie der randomLong-Template-Variablen den folgenden Wert: groovyScript(“new Random().nextLong().abs()”)

https://pharsfalvi.wordpress.com/2015/03/18/adding-serialversionuid-in-idea/

  • Ich liebe diesen Kommentar, die Verwendung von Live-Vorlagen ist mit Sicherheit die schnellste und am besten anpassbare Lösung (ich habe zum Beispiel den Zeilenumbruch entfernt). Gehen Sie zum Konfigurieren zu Android Studio > Einstellungen > Editor > Live-Vorlagen und erstellen Sie dort eine neue (Plus-Symbol) mit diesem Wert und verwenden Sie Bearbeitungsvariablen, um das Skript einzugeben

    – hcpl

    16. Oktober 2017 um 15:34 Uhr


Benutzer-Avatar
acdcjunior

Darüber hinaus können Sie eine Live-Vorlage hinzufügen, die die Arbeit erledigt.

Drücken Sie dazu Strg+Alt+S -> "Live Templates" Abschnitt -> other (oder wenn Sie möchten)

Und dann erstellen Sie eine neue mit einer Definition wie dieser:

private static final long serialVersionUID = 1L;
$END$

Wählen Sie dann aus definition Bereich und speichern Sie es als 'serial'

Jetzt können Sie tippen serialTAB im Klassenkörper.

  • Ich liebe diesen Kommentar, die Verwendung von Live-Vorlagen ist mit Sicherheit die schnellste und am besten anpassbare Lösung (ich habe zum Beispiel den Zeilenumbruch entfernt). Gehen Sie zum Konfigurieren zu Android Studio > Einstellungen > Editor > Live-Vorlagen und erstellen Sie dort eine neue (Plus-Symbol) mit diesem Wert und verwenden Sie Bearbeitungsvariablen, um das Skript einzugeben

    – hcpl

    16. Oktober 2017 um 15:34 Uhr


Benutzer-Avatar
jeremysprofil

Einfachste moderne Methode: Alt+Enter an

private static final long serialVersionUID = ;

IntelliJ wird das Leerzeichen nach dem unterstreichen =. Setzen Sie den Cursor darauf und drücken Sie alt+Enter (Option+Enter auf dem Mac). Sie erhalten ein Popover mit der Aufschrift „Randomly Change serialVersionUID Initializer“. Drücken Sie einfach die Eingabetaste, und es wird diesen Raum mit einer zufälligen Länge füllen.

1359440cookie-checkIntelliJ IDEA generiert serialVersionUID

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy