Wie ein kleines Projekt habe ich versucht, eine kleine Sache zu machen, die serialisierte Lambdas (lokal oder von einem FTP) liest und ihre Lauffunktionen als Teil eines Tests zum Experimentieren mit Dateizuordnungen in Windows (dh das Öffnen bestimmter Dateitypen öffnet sie mit einem bestimmten Programm) und was auch immer, aber egal was ich versuche, scheint es nie richtig zu deserialisieren.Lambda nicht deserialisieren
Das Lambda wurde wie so
erklärenRunnable r = (Runnable & Serializable)() -> {
// blah blah
// made sure not to capture anything
};
und serialisiert einen Outputstream durch ein [n optional] BufferedOutputStream von einem Object ohne Problem gewickelt werden. Wenn es jedoch [in einem anderen Projekt] deserialisiert wird, schlägt es fehl und sagt, dass es die umschließende Klasse, die den Code für die Serialisierung enthielt, nicht finden konnte. Ich habe verschiedene Dinge versucht, wie sie in eine serialisierbare Klasse (w/serialVersionUID = 0L für Testzwecke) zu wickeln oder eine Schnittstelle zu definieren, die Runnable und Serializable erweitert, aber ohne Erfolg.
Ja, ich bin mir bewusst, dass das Serialisieren von Lambdas nicht wirklich gute Übung ist (aber das wird uns gesagt), aber ich bin mir nicht sicher, wie ich Funktionen und Subroutinen in etwas umwandeln kann, das ich als Datei speichern kann in einem FTP. Wenn das überhaupt nicht der richtige Weg ist, sag es.
Oh, ich benutze Eclipse Luna von was auch immer die neueste Version ist.
Edit:
entserialisierten wie so
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();
Warten Sie, um eine Methode zu serialisieren? –
Methodenobjekte sind nicht serialisierbar. Ich spreche von einem Runnable Lambda. –
Können Sie uns Ihren Serialisierungs-/Deserialisierungscode zeigen? –