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
Peter Lawrey
Ich bin mir nicht sicher, ob Sie eine alte Version von IntelliJ IDEA haben, aber wenn ich zum Menü gehe Datei → Einstellungen… → Inspektionen → Serialisierungsprobleme → Serialisierbare Klasse ohne ‘serialVersionUID’ aktiviert, die von Ihnen bereitgestellte Klasse gibt mir Warnungen.
Wenn ich die erste Klasse versuche, sehe ich:
Ü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.
Jetzt können Sie die ID aus dem Menü generieren Code → Generieren → 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
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.
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()”)
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
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
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.
13594400cookie-checkIntelliJ IDEA generiert serialVersionUIDyes
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