2016-06-30 9 views
2

Ich habe oben @FunctionalInterface und es hat eine generische Methode.Java 8 lambda generische Schnittstelle Methode

Wie kann ich Lambda-Ausdruck verwenden, um diese Schnittstelle darzustellen?

ich unten Code versucht, aber es funktioniert nicht,

GenericFunctionalInterface gfi =() -> {return "sss";}; 

Ich habe Fehler kompilieren: Illegal Lambda-Ausdruck: Methode Genericmethod vom Typ GenericFunctionalInterface ist generisch

Wo kann ich den Typ platzieren Info?

+0

See [diese Antwort] (http://stackoverflow.com/a/22588738/ 304) und Abschnitt [§15.27.3] (http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.27.3) in JLS8. "Ein Lambda-Ausdruck stimmt mit einem Funktionstyp überein, wenn alle folgenden Bedingungen erfüllt sind: Der Funktionstyp hat keine Typparameter." – McDowell

+0

Meinst du "generische" Methode? Ich sehe keine Verbindung zu Genetik. Abgesehen davon, wie soll das funktionieren? Die Methode ' T geneticMethod()' verspricht, alles zurückzugeben, was der Aufrufer wünscht, so dass ein Lambda-Ausdruck ein 'String' liefert, das nicht erfüllt. – Holger

+0

Danke Holger. es ist generisch. Ich frage mich, ob ich die Typinformationen für den Lambda-Ausdruck festlegen kann. –

Antwort

6

Die generischen (nicht genetisch bedingt) Typ Parameter sollen in der Interface-Ebene deklariert werden, nicht in der Methode Ebene:

public interface GenericFunctionalInterface<T> { 
    public T genericMethod(); 
} 

GenericFunctionalInterface<String> gfi =() -> {return "sss";};