Proprio come un piccolo progetto, ho cercato di creare una cosa che legge lambda serializzato (localmente o da un FTP) e invoca le loro funzioni di esecuzione come parte di un test per sperimentare le associazioni di file in Windows (ovvero l'apertura di determinati tipi di file li apre con un determinato programma) e quant'altro, ma non importa quello che provo, non sembra mai deserializzare correttamente.Impossibile deserializzare lambda
La lambda è stato dichiarato in questo modo
Runnable r = (Runnable & Serializable)() -> {
// blah blah
// made sure not to capture anything
};
e serializzato utilizzando un FileOutputStream avvolta da un [n opzionale] BufferedOutputStream avvolto da un ObjectOutputStream senza alcun problema. Tuttavia, quando deserializzato [in un progetto diverso], fallisce, dicendo che non è stato in grado di trovare la classe che contiene il codice per la serializzazione. Ho provato varie cose, come ad esempio il loro wrapping in una classe serializzabile (w/serialVersionUID = 0L a scopo di test) o la definizione di un'interfaccia che estende Runnable e Serializable, ma senza alcun risultato.
Sì, sono consapevole che serializzare lambda non è una buona pratica (o almeno così ci viene detto), ma non sono sicuro di come trasformare funzioni e subroutine in qualcosa che posso memorizzare come file o in un FTP. Se questo non è nemmeno il modo giusto, dillo.
Oh, sto usando Eclipse Luna di qualunque sia l'ultima versione.
Edit:
deserializzato in questo modo
File f = new File(somePath);
FileInputStream fish = new FileInputStream(f);
BufferedInputStream bos = new BufferedInputStream(fish); // not really necessary
ObjectInputStream ois = new ObjectInputStream(bos);
Runnable r = (Runnable) ois.readObject();
ois.close();
r.run();
In attesa stai provando a serializzare un metodo? –
Gli oggetti metodo non sono serializzabili. Sto parlando di un lambda Runnable. –
Puoi mostrarci il tuo codice di serializzazione/deserializzazione? –