Tak jak w przypadku małego projektu, próbowałem zrobić małą rzecz, która czyta serializowane lambdy (lokalnie lub z FTP) i wywołuje ich funkcje uruchamiania w ramach testu, aby eksperymentować ze skojarzeniami plików w Windows (np. Otwieranie pewnych typów plików otwiera je z określonym programem) i inne, ale bez względu na to, co próbuję, nigdy nie wydaje się poprawnie deserializować.Nie można deserializować lambda
lambda został uznany podobnie jak
Runnable r = (Runnable & Serializable)() -> {
// blah blah
// made sure not to capture anything
};
i szeregowane stosując FileOutputStream owinięte [N opcjonalnie] BufferedOutputStream owinięty przez ObjectOutputStream bez problemu. Jednak po deserializacji [w innym projekcie], nie powiedzie się, mówiąc, że nie może znaleźć klasy otaczającej, która zawierała kod do serializacji. Próbowałem różnych rzeczy, takich jak owijając je w klasy serializowalne (w/serialVersionUID = 0L do celów testowych) lub definiując interfejs, który rozszerza Runnable i Serializable, ale bezskutecznie.
Tak, zdaję sobie sprawę, że serializacja lambdas nie jest tak naprawdę dobrą praktyką (lub tak nam powiedziano), ale nie jestem pewien, jak zmienić funkcje i podprogramy w coś, co można zapisać jako plik lub na FTP. Jeśli to nawet nie jest właściwa droga, powiedz to.
Och, używam Eclipse Luna jakiejkolwiek najnowszej wersji.
Edit:
rozszeregować jak tak
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();
Czekasz, próbujesz serializować metodę? –
Obiekty metod nie są przekształcalne do postaci szeregowej. Mówię o Runnable lambda. –
Czy możesz pokazać nam swój kod serializacji/deserializacji? –