2017-07-05 209 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

是的。谢谢先生。我会删除它。 –