Fammi indovinare: sei serializzato (attraverso la serializzazione incorporata di Java) una classe che contiene un ClassManifest
(Da chi. ClassTypeManifest
È un sottotipo) in un file (o un database), quindi aggiorna la versione Scala e ora tentando di deserializzare quel file, giusto? Oppure invii un oggetto serializzato da un processo JVM all'altro, e corrono diverse versioni di Scala.
Bene, non farlo. Il primo motivo è quello ClassTypeManifest
non dichiara esplicito serialVersionUID
campo (vedi Cos'è un serialversionuid e perché dovrei usarlo?), che indica chiaramente che qualsiasi modifica alla classe potrebbe modificare il formato di serializzazione. Non puoi davvero aspettarti alcuna compatibilità all'indietro in ClassTypeManifest
's flussi serizzati. Inoltre, a Scala 2.10 ClassManifest
non è nemmeno una lezione più: è un semplice alias ClassTag
che è una classe significativamente diversa.
Quindi, in realtà, non aspettarti di essere in grado di serializzare (usando la serializzazione di Java) a ClassManifest
e leggilo con un'altra versione di Scala.
Se hai davvero bisogno di usare Java Reflection, potresti provare a sostituire il tuo ClassManifest
campi con java.lang.Class
campi (che sono sempre sicuri per serializzare / deserializzare).
Altrimenti, potresti cercare utilizzando altre librerie di serializzazione.