日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

保存您的lambda,以备不时之需-保存到文件

發布時間:2023/12/3 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 保存您的lambda,以备不时之需-保存到文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

介紹

簡短的帖子,描述了如何將Java lambda持久保存到文件中以在不同的過程中重復使用。

序列化Lambda

Java 8中引入的Lambda使函數成為Java語言的一等公民(幾乎)。 它們消除了使用專用類來保存函數的需要。 但是,這是如何進行的呢?

實際上,javac劫持了包含函數的類,并添加了包含函數實現的靜態方法。 函數調用站點被新添加的靜態方法的調用替換。 有關lambda實現魔術的完整說明,請參見
文章 。

Oracle很有幫助地提供了SerializableLambda類,該類實現了lambda的可序列化形式,提供了足夠的元信息來重建調用。 我們要做的就是將lambda轉換為可序列化的,然后使用標準的標準機械來封送lambda。 以下是一些實用程序函數,用于對lambda進行序列化和反序列化。

public static <F extends Function & Serializable> void serialise(F f, String name) throws Exception {try (var oos = new ObjectOutputStream(new FileOutputStream(new File(name)))) {oos.writeObject(f);} }public static <T, R, F extends Function<T, R>> F deserialise(String name) throws Exception {try (var ois = new ObjectInputStream(new FileInputStream(name))) {return (F) ois.readObject();} }

在序列化函數中,我使用相交類型將函數轉換為Serializable。 有一個帶有測試主體的小項目
在這里演示序列化。 執行功能的主要方法:

public class Main {public static void main(String[] args) throws Exception {if (false) {serialise(s -> "hello - " + s, "func1");}System.out.println(deserialise("func1").apply("Greg"));//rewrite func-1serialise(s -> "goodbye - " + s, "func1");System.out.println(deserialise("func1").apply("Greg"));}public static <F extends Function & Serializable> void serialise(F f, String name) throws Exception {try (var oos = new ObjectOutputStream(new FileOutputStream(new File(name)))) {oos.writeObject(f);}}public static <T, R, F extends Function<T, R>> F deserialise(String name) throws Exception {try (var ois = new ObjectInputStream(new FileInputStream(name))) {return (F) ois.readObject();}}}

該項目的根目錄中有一個序列化的lambda“ func-1”。 運行項目將看到func-1被覆蓋,因此第二次執行將得到與第一次不同的結果:

第一次執行:

你好–格雷格

再見–格雷格

第二次執行:

再見–格雷格

再見–格雷格

希望您喜歡這篇小文章,并發現它有趣。

翻譯自: https://www.javacodegeeks.com/2019/07/save-lambdas-rainy-day-save-file.html

總結

以上是生活随笔為你收集整理的保存您的lambda,以备不时之需-保存到文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。