2017-07-05 8 views
2

ich eine Methode aus der Bibliothek haben, die wie folgt aussehen:Custom-Schnittstelle in Java Lambda Ausdruck

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

Und EntryProcessor Schnittstelle eine einzige Methode Definition hat:

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

für meinen Anwendungsfall Leider I brauche EntryProcessor mit Serializable.

Eine Lösung besteht darin, eine neue Klasse zu erstellen, die sowohl EntryProcessor als auch Serializable implementiert. In diesem Fall müsste ich für jeden anderen Anwendungsfall eine andere Klasse erstellen.

Normalerweise, ohne Serializable, kann ich invoke Methode als Lambda aufrufen, die mich vor dem Erstellen von Pack von spezialisierten Klassen speichert.

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

Gibt es eine Möglichkeit, dieses Lambda mit Serializable Schnittstelle zu verlängern?

+5

Siehe [Wie ein Lambda-Serialisierung?] (Https://stackoverflow.com/q/22807912/2711488) – Holger

Antwort

0

Wie wäre es damit?

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

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

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

Die Helfer-Methode funktioniert nicht. Sie gibt ein serialisierbares Objekt mit einem Verweis auf das ursprüngliche Objekt zurück, das nicht serialisierbar ist. So wird jeder Versuch, es zu serialisieren, fehlschlagen. – Holger

+0

ja. Danke, mein Herr. Ich werde es entfernen. –