2017-07-05 170 views
2

我從庫中的方法,該方法是這樣的:自定義界面

<T> T invoke(K key, EntryProcessor<K, V, T> entryProcessor, Object... arguments); 

而且EntryProcessor接口只有一個方法的定義:

T process(MutableEntry<K, V> entry, Object... arguments) throws EntryProcessorException; 

不幸的是,我使用的情況下,我需要EntryProcessorSerializable

一個解決方案是創建一個新類,實現EntryProcessorSerializable,在這種情況下,我將不得不爲每個不同的用例創建不同的類。

通常,如果沒有Serializable,我可以將invoke方法稱爲lambda,這可以使我無法創建一組專用類。

foo.invoke(1L, (entry, arguments) -> { 
    ... 
    return null; 
}); 

有沒有辦法用Serializable接口擴展這個lambda?

+5

參見[如何序列化拉姆達?](https://stackoverflow.com/q/22807912/2711488) – Holger

回答

0

這個怎麼樣?

Object[] arguments = new Object[0]; 
EntryProcessor<Long, String, Integer> it; 

it = (EntryProcessor<Long, String, Integer> & Serializable) (entry, args) -> 1; 

invoke(1L, it, arguments); 
+1

該助手方法不起作用。它返回一個可序列化的對象,該對象具有對不可序列化的'original'對象的引用。所以任何序列化的嘗試都會失敗。 – Holger

+0

是的。謝謝先生。我會刪除它。 –