lambda层保存模型出错_保存您的lambda,以备不时之需-保存到文件
lambda層保存模型出錯(cuò)
介紹
簡(jiǎn)短的帖子,描述了如何將Java lambda持久化到文件中以在不同的過程中重復(fù)使用。
序列化Lambda
Java 8中引入的Lambda使函數(shù)成為Java語(yǔ)言的一等公民(幾乎)。 他們不需要專門的類來保存函數(shù)。 但是,這是如何進(jìn)行的呢?
實(shí)際上,javac劫持了包含函數(shù)的類,并添加了包含函數(shù)實(shí)現(xiàn)的靜態(tài)方法。 函數(shù)調(diào)用站點(diǎn)被新添加的靜態(tài)方法的調(diào)用替換。 有關(guān)lambda實(shí)現(xiàn)魔術(shù)的完整說明,請(qǐng)參見
文章 。
Oracle很有幫助地提供了SerializableLambda類,該類實(shí)現(xiàn)了lambda的可序列化形式,提供了足夠的元信息來重建調(diào)用。 我們要做的就是將lambda轉(zhuǎn)換為可序列化的,然后使用標(biāo)準(zhǔn)的標(biāo)準(zhǔn)機(jī)械來封送lambda。 以下是一些實(shí)用程序函數(shù),用于對(duì)lambda進(jìn)行序列化和反序列化。
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();} } 在序列化函數(shù)中,我使用相交類型將函數(shù)轉(zhuǎn)換為Serializable。 有一個(gè)帶有測(cè)試主體的小項(xiàng)目
在這里演示序列化。 執(zhí)行功能的主要方法:
該項(xiàng)目的根目錄中有一個(gè)序列化的lambda“ func-1”。 運(yùn)行項(xiàng)目將看到func-1被覆蓋,因此第二次執(zhí)行將得到與第一次不同的結(jié)果:
第一次執(zhí)行:
你好–格雷格
再見–格雷格
第二次執(zhí)行:
再見–格雷格
再見–格雷格
希望您喜歡這篇小文章,并發(fā)現(xiàn)它有趣。
翻譯自: https://www.javacodegeeks.com/2019/07/save-lambdas-rainy-day-save-file.html
lambda層保存模型出錯(cuò)
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的lambda层保存模型出错_保存您的lambda,以备不时之需-保存到文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 妈妈的英语怎么说 妈妈怎么说英语
- 下一篇: 微软前首席产品官帕奈将出任亚马逊设备和服