Lass mich raten:Sie haben (über die in Java integrierte Serialisierung) eine Klasse serialisiert, die a enthält ClassManifest
(von wem ClassTypeManifest
ist ein Untertyp) zu einer Datei (oder Datenbank), haben dann Ihre Scala-Version aktualisiert und versuchen nun, diese Datei zu deserialisieren, oder?Oder Sie senden ein serialisiertes Objekt von einem JVM-Prozess an einen anderen und diese führen verschiedene Scala-Versionen aus.
Nun, tu es nicht.Der erste Grund ist dieser ClassTypeManifest
erklärt kein explizites serialVersionUID
Feld (siehe Was ist eine serialVersionUID und warum sollte ich sie verwenden?), was deutlich darauf hinweist, dass jede Änderung an der Klasse das Serialisierungsformat ändern könnte.Man kann eigentlich keine Abwärtskompatibilität erwarten ClassTypeManifest
's serailisierte Streams.Darüber hinaus in Scala 2.10 ClassManifest
ist nicht einmal mehr eine Klasse:es ist lediglich ein Pseudonym für ClassTag
Das ist eine deutlich andere Klasse.
Erwarten Sie also wirklich nicht, dass Sie a serialisieren können (mithilfe der Java-Serialisierung). ClassManifest
und lesen Sie es mit einer anderen Version von Scala zurück.
Wenn Sie wirklich Java Reflection verwenden müssen, können Sie versuchen, Ihre zu ersetzen ClassManifest
Felder mit java.lang.Class
Felder (die immer sicher serialisiert/deserialisiert werden können).
Andernfalls könnten Sie die Verwendung anderer Serialisierungsbibliotheken in Betracht ziehen.