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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

java中comparator实现序列化_java – 确保Function参数是可序列化的最好方式是什么?...

發布時間:2024/10/12 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中comparator实现序列化_java – 确保Function参数是可序列化的最好方式是什么?... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我正在編寫一個可序列化的類,它接受幾個參數,包括一個函數:

public class Cls implements Serializable {

private final Collection _coll;

private final Function _func;

public Cls(Collection coll, Function func) {

_coll = coll;

_func = func;

}

}

func存儲在成員變量中,因此需要可序列化. Java lambdas are serializable if the type they’re being assigned to is serializable.什么是最好的方法來確保我的構造函數中傳遞的函數是可序列化的,如果它是使用lambda創建的?

>創建一個SerializableFunction類型并使用它:

public interface SerializableFunction implements Function, Serializable {}

....

public Cls(Collection coll, SerializableFunction func) {...}

問題:

> coll和func參數之間現在不匹配,因為func在簽名中被聲明為可序列化,但是coll不是,但是都需要可序列化才能工作.

>它不允許Function的其他實現可序列化.

>在構造函數上使用一個類型參數:

public & Serializable>

Cls(Collection coll, F func) {...}

問題:

>比1更靈活,但更混亂.

>兩個參數之間仍然存在不匹配 – func參數是在編譯時類型的父進程中實現Serializable所必需的,但是coll只是需要以某種方式進行序列化(盡管如果需要可以將其刪除).

編輯當嘗試使用lambda或方法引用調用時,此代碼實際上不會編譯.

把它留給來電者

這需要調用者知道(從javadocs或者是試驗和錯誤)參數需要是可序列化的,并且適當地轉換:

Cls c = new Cls(strList, (Function & Serializable)s -> ...);

要么

Cls c = new Cls(strList, (Function & Serializable)Foo::processStr);

這是一個丑陋的IMO,并且使用lambda的初始天真的實現保證破壞,而不是像coll一樣工作(因為大多數集合可以以某種方式串行化).這也將類的實現細節推送到調用者.

目前,我傾向于選項2,作為對呼叫者施加最小負擔的那個,但是我不認為這里有一個理想的解決方案.任何其他建議如何正確地做到這一點?

編輯:也許需要一些背景.這是一個在storm中運行的類,它是一個螺栓,它被序列化以傳送到刪除集群來執行.該功能是在集群上運行時對已處理的元組執行操作.所以它是類的目的的很大一部分,它是可序列化的,并且函數參數是可序列化的.如果不是,則該類根本不可用.

總結

以上是生活随笔為你收集整理的java中comparator实现序列化_java – 确保Function参数是可序列化的最好方式是什么?...的全部內容,希望文章能夠幫你解決所遇到的問題。

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