Meine serialisierbare Klasse wird nicht mit objectinputstream nach dem Hinzufügen von statischen Methoden zur Klasse eingelesen, ist das erwartete Verhalten? Wo im javadoc heißt es hinzufügen statische Methoden zu einer serialisierbaren Klasse schafft Inkompatibilität?Ändern einer serialisierbaren Klasse durch Hinzufügen von statischen Methoden, Java
0
A
Antwort
4
In der Serialisierung Specification Java-Objekts, Abschnitt 4.6:
Die Stream-eindeutige Kennung ist ein 64-Bit-Hash-Wert von dem Klassennamen, Schnittstellenklassennamen, Methoden und Feldern.
...
Für jede nicht-private durch Methodennamen sortiert Methode und Unterschrift:
- Der Name der Methode.
- Die Modifizierer der Methode wurden als 32-Bit-Ganzzahl geschrieben.
- Der Deskriptor der Methode.
Nein, ich kann nicht arbeiten, wie es tatsächlich Kompatibilität von serialisierten Zustand entweder brechen könnte, aber das ist, warum es entweder wert die Standard-Java binäre Serialisierung zu vermeiden (zB für Protocol Buffers) oder immer eine serialVersionUid
selbst deklarieren.
Verwandte Themen
- 1. Java: Präferenzklasse abhängig von einer Klasseninstanz oder statischen Methoden?
- 2. Ein Problem beim Aufrufen von statischen Methoden aus einer Klasse
- 3. Hinzufügen von Java-Klasse-Methoden in einen neuen Thread
- 4. Java Annotation zum Erzwingen von statischen Variablen oder statischen Methoden?
- 5. Zugriff auf den statischen statischen Variablenwert von Java durch Reflektion
- 6. Leistung von serialisierbaren Lambdas in Java 8
- 7. Alternativen zu statischen Methoden in Java
- 8. Sind native Java-Methoden äquivalent zu statischen Java-Methoden?
- 9. Groovy Meta-Programmierung - Hinzufügen von statischen Methoden zu Object.metaClass
- 10. Java-Generics mit statischen Factory-Methoden
- 11. Hervorrufen von privaten Methoden einer abstrakten Klasse
- 12. Hinzufügen von "statischen" Funktionen zu einer Struktur
- 13. Aufruf einer geschützten statischen Java-Methode von Scala
- 14. Klasse Reflexion von einer statischen Methode
- 15. Serialisieren einer statischen Klasse?
- 16. Statische Methoden oder keine statischen Methoden in der Dao-Klasse?
- 17. Verwenden von privaten statischen Methoden
- 18. Verwendung von Method aufrufen mit statischen Methoden?
- 19. Aufruf von statischen Methoden für Objektinstanzen und eine Randnotiz Java
- 20. Hinzufügen von Aktionen zu einer Schaltfläche durch eine andere Klasse
- 21. Swift initialisieren Self in einer statischen Methoden
- 22. Abrufen der MethodInfo der statischen Methode einer statischen Klasse
- 23. SVG-Animation nur durch Hinzufügen einer Klasse
- 24. Nachteile von statischen Methoden in PHP
- 25. Ändern eines nicht statischen Objekts von einer statischen Methode
- 26. Java-Effizienz von bewegten Methoden zu einer anderen Klasse
- 27. Ausführen von Methoden aus einer anderen Klasse in Java
- 28. Verwenden von statischen Mutex in einer Klasse
- 29. Lambda mit nicht-statischen Methoden in Java 8
- 30. Anwenden von statischen Schlüsselwort auf eine Klasse in Java
Es ist unmöglich, Ihr Problem ohne weitere Informationen zu diagnostizieren. Bitte posten Sie etwas Code und beschreiben Sie das Problem ein wenig mehr. –
Ausnahme im Thread "main" java.io.InvalidClassException: lokale Klasse inkompatibel: stream classdesc serialVersionUID = 2421933566308851961, lokale Klasse serialVersionUID = 6969314805631849195, alles, was ich tat, war statische Methoden hinzuzufügen, Hinzufügen der alten serialversion uid behoben das Problem –
Danke. Das bedeutet natürlich, dass Jon Skeet Ihr Problem gelöst hat, was niemals eine Überraschung ist. –