2017-04-04 1 views
0

Im folgenden Code:Automatisch abgeleitete multiplizierte Parameter - ist das möglich?

interface Callback { 
    void greet(String greeting); 
} 

private static <T extends Callback & Serializable> void greetMe(T callback) { 
    callback.greet("Hello world!"); 
} 

public static void main(String[] args) { 
    greetMe(greeting -> System.out.println(greeting)); 
} 

Die folgende Zeile nicht kompiliert, da das Lambda nicht Serializable ist:

greetMe(greeting -> System.out.println(greeting)); 

Meine Frage ist, gibt es einen syntaktischen Zucker das Lambdas zur Herstellung von Serializable implementieren, oder muss ich es zu einer nicht anonymen Klasse machen?

+1

http://stackoverflow.com/questions/22807912/how-to-serialize-a-lambda –

+0

Dank! Es ist definitiv ein Duplikat, und der Beitrag hat mir geholfen, das Problem zu lösen. – DonAlonzo

Antwort

1

Vom JLS 15.16. Cast Expressions:

Casts verwendet werden können, um explizit „tag“ ein Lambda-Ausdruck oder ein Verfahren, Referenzausdruck mit einem bestimmten Zieltyp. Um einen angemessenen Grad an Flexibilität zu bieten, kann der Zieltyp eine Liste von Typen sein, die einen Kreuzungstyp bezeichnen, vorausgesetzt, der Schnittpunkt induziert eine funktionale Schnittstelle (§9.8).

Sie können es direkt an Serializable Stimmen:

greetMe((Callback & Serializable) greeting -> System.out.println(greeting)); 
+1

Es gibt eine Menge Themen, die sich mit diesem Thema beschäftigen, bitte als Duplikat kennzeichnen anstatt zu antworten. – Mistalis

+1

Sie haben Recht ... normalerweise markiere ich sie oder stimme sie als Duplikat ab ... es ist einfach passiert, dass ich die Antwort bereits hatte und so wurde die weitere Untersuchung, ob es überhaupt gefragt wurde, danach gemacht ... und all das ist nur innerhalb von 7 Minuten passiert ;-) – Roland

Verwandte Themen