So generieren Sie eine UID für die serielle Version in Intellij

126

Als ich Eclipse verwendete , hatte es eine nette Funktion, um die UID der seriellen Version zu generieren.

Aber was tun in IntelliJ?

Wie wähle oder generiere ich eine identische UID der seriellen Version in IntelliJ?

Und was tun, wenn Sie die alte Klasse ändern?

Wenn Sie das nicht angegeben haben id, wird es zur Laufzeit generiert ...

nazar_art
quelle
1
Duplikat von stackoverflow.com/questions/12912287/…
Bruno Volpato
@JFIB Die Klassenkonstante serialVersionUIDwird vom Compiler generiert, wenn sie nicht angegeben wird. Die Angabe hat den Vorteil (und die Gefahr), dass die ID für geänderte Klassenversionen identisch bleibt. Das heißt, eine Datei mit einem Objekt der alten Version wird mit der neuen Version gelesen (deserialisiert) oder umgekehrt.
Joop Eggen

Antworten:

303

Ohne Plugins:

Sie müssen nur die Hervorhebung aktivieren: (Idea v.2016, 2017 und 2018, frühere Versionen haben möglicherweise dieselben oder ähnliche Einstellungen)

Datei -> Einstellungen -> Editor -> Inspektionen -> Java -> Serialisierungsprobleme -> Serialisierbare Klasse ohne 'serialVersionUID' - Flag setzen und auf 'OK' klicken. (Für Macs finden Sie die Einstellungen unter IntelliJ IDEA -> Einstellungen ...)

Wenn Ihre Klasse jetzt implementiert wird Serializable, sehen Sie Hervorhebung und Alt + Eingabetaste für den Klassennamen schlägt vor, zu generieren private static final long serialVersionUID.

UPD: Ein schnellerer Weg, um diese Einstellung zu finden - Sie können einen Hotkey verwenden Ctrl+Shift+A(Aktion suchen), geben Sie ein Serializable class without 'serialVersionUID'- der erste ist der eine.

Serhii Maksymchuk
quelle
2
@ SalilJunior Nicht wirklich. Die integrierte Fähigkeit zum Generieren einer serialVersionUID ist an Inspektionswarnungen gebunden. Sie stecken fest, wenn Sie die Inspektionswarnung nicht aktivieren möchten, sondern in einigen Fällen die serialVersionUID generieren möchten.
Fabian Barney
Diese Lösung funktioniert bei mir nicht. Ich kann nur die folgenden Optionen anzeigen: Parcelable-Implementierung entfernen, Parcelable-Implementierung ersetzen, Test erstellen, Unterklasse erstellen und Paket privat machen. Die Klasse, die ich verwende, implementiert Parcelable und Serializable gleichzeitig. Irgendeine Idee?
Gonver
Haben Sie überprüft, ob das erforderliche Flag in den obigen Einstellungen gesetzt ist? Getestet in v16 und v17 Idee, funktioniert gut. Überprüfen Sie auch zusätzliche Einstellungen für eine solche Überprüfung, nachdem Sie im Einstellungsfenster (rechts) darauf geklickt haben.
Serhii Maksymchuk
Ich wusste das nicht und finde es sehr hilfreich.
Chaklader Asfak Arefe
61

Einfachste Methode: Alt+ Enterein

private static final long serialVersionUID = ;

IntelliJ unterstreicht den Raum nach dem =. Setzen Sie den Cursor darauf und drücken Sie alt+ Enter( Option+ Enterauf dem Mac). Sie erhalten ein Popover mit der Aufschrift "Randomly Change serialVersionUID Initializer". Drücken Sie einfach die Eingabetaste, und dieser Bereich wird mit einer zufälligen Länge gefüllt.

jeremysprofile
quelle
Vielen Dank für mich in IntelliJ IDEA Community Edition Version 2018.3.3
Tarun
In Java-Dokumenten wird außerdem empfohlen, nach Möglichkeit einen privaten Modifikator zu verwenden. docs.oracle.com/de/java/javase/11/docs/api/java.base/java/io/…
Ilya Lozinsky
2
Bessere Antwort auf die obige.
Akin Okegbile
32

Installieren Sie das GenerateSerialVersionUID- Plugin

Meo
quelle
2
Warum ein Plugin installieren, wenn dies einfach möglich ist, wie von @Serhii unten gezeigt?
Shaz
2
@shaz Ich bevorzuge es, wenn diese Inspektion deaktiviert ist, aber für einige Klassen ist es erforderlich, eine explizite serialVersionUID zu erhalten. Ich möchte nicht jede Klasse ablenken, während ich serialVersionUID nur für eine benötige.
Timofey
1
Ich denke, das Plugin hilft beim Generieren von Werten für Unterklassen, in denen die übergeordnete Klasse auch serialisierbar ist und a enthält serialVersionUID. Dies ist der Fall, wenn Sie die untergeordnete Klasse aktualisiert haben und eine neue serialVersionUID für diese Klasse generieren müssen, ohne die serialVersionUID der übergeordneten Klasse zu ändern (in Fällen, in denen keine Änderung an der übergeordneten Klasse vorgenommen wurde).
Kapad
Dies kann zwar die Frage beantworten, es ist jedoch besser, hier die tatsächlichen Informationen und nicht nur einen Link anzugeben. Nur-Link-Antworten gelten nicht als gute Antworten und werden wahrscheinlich gelöscht .
Elixenid
3
@EdCottrell Es sind keine weiteren Informationen bereitzustellen. Verwenden Sie entweder das Plugin oder nicht.
Meo
2

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

sehr schön, sehr einfach zu installieren. Sie können das über das Plugins-Menü installieren, "Von der Festplatte installieren" auswählen und die JAR-Datei auswählen, die Sie im lib-Ordner entpackt haben. Neustart, Steuerung + Ins, und es wird angezeigt, um eine serielle UID aus dem Menü zu generieren. Liebe es. :-)

Patch-Rhythmus
quelle
0

Öffnen Sie im Code-Editor die Klasse, für die Sie die UID erstellen möchten, und klicken Sie mit der rechten Maustaste auf -> Generieren -> SerialVersionUID. Möglicherweise muss das Plugin GenerateSerialVersionUID installiert sein, damit dies funktioniert.

mein Schlüssel
quelle
1
Wie fügt Ihre Antwort Ihrer Meinung nach etwas Neues zur Lösung dieses Problems hinzu? Wenn die Antwort nicht lautet, entfernen Sie einfach Ihre Antwort, da sie unbrauchbar ist.
Nazar_art
Nach dem Hinzufügen des Plugins können einige verwirrt sein, wie die UID tatsächlich generiert wird. Das wird hinzugefügt.
Mykey
1
Ich denke, dass sie die Manpage für dieses Plugin lesen können. Ihre Antwort ist offensichtlich.
nazar_art