2017-11-25 1 views
-3
@FunctionalInterface 
public interface myFunction<T> { 
    abstract double apply(T t); 
} 

Der obige Code ist meine funktionale Schnittstelle.Was macht die Funktionsschnittstelle im Lambda-Ausdruck?

Und der folgende Code ist mein Lambda-Ausdruck. Was macht die funktionale Schnittstelle in meinem Lambda-Ausdruck, da es nur ein einfaches "Double" gibt? Wenn es keine funktionale Schnittstelle gibt, wie wird es dann aussehen?

import java.util.HashSet; 

public class TestFindArea { 
public static double findArea(myFunction<Double> f,double a,double b){ 
    return (f.apply(a)+f.apply(b))*(b-a)/2; 
} 
    public static void main(String[] args) { 
     System.out.println(findArea((x) -> x+2 , 4, 8)); 
+0

Fragen Sie, was die '@ FunctionalInterface' Annotation ist? Oder fragen Sie nach Ihrem Code? Ich kann nicht verstehen, was du verlangst. Beachten Sie auch die Java-Namenskonventionen. Klassen und Schnittstellen haben einen Großbuchstaben. –

+0

Ich verstehe nicht, warum es in der funktionalen Programmierung eine funktionale Schnittstelle geben muss und was die Schnittstelle macht –

+0

In der funktionalen Programmierung muss es keine funktionalen Schnittstellen geben. Das Grundprinzip besteht darin, Funktionen an andere Funktionen zu übergeben. Aber Java ist eine OO-Sprache und hat keine direkte Unterstützung für Funktionen. Es hat jedoch Unterstützung für Schnittstellen. Daher entschieden sich die Java-Entwickler dafür, eine Schnittstelle mit einer einzigen Methode zur Darstellung eines Funktionstyps zu verwenden. Und Lambda-Ausdrücke sind Instanzen dieser funktionalen Schnittstellen. Andere funktionale Sprachen wie JavaScript oder Kotlin benötigen solche Schnittstellen nicht. Sie können nur Funktionen der obersten Ebene definieren und diese direkt übergeben. Ist es das, was du fragst? –

Antwort

0

Was in meinem Lambda-Ausdruck ist die funktionale Schnittstelle zu tun, da es nur ein einfaches 'double' ist?

Ihre funktionale Schnittstelle stellt eine Funktion, die einen generischen Typ nimmt T und gibt eine doppelte, also überall dort, wo wir die funktionale Schnittstelle als Zieltyp nutzen, schließlich müssen wir es eine Funktion zuweisen oder übergeben, die die erfüllt Funktionsbeschreibung seiner SAM. In Ihrem Fall ist also das erste Argument zu findArea((x) -> x+2 , 4, 8) die Funktion, die an die findArea-Methode übergeben wird und als gelesen werden kann. Geben Sie eine Zahl vom Typ Double an, fügen Sie die Zahl 2 hinzu und geben Sie das Ergebnis zurück.

Wenn es keine funktionale Schnittstelle gibt, wie wird es sein?

Dann Sie können nicht Pass Funktionen als Argumente für andere Funktionen noch können Sie verwenden Funktionen als Rückgabetypen für andere Funktionen und noch können Sie einen Lambda-Ausdruck auf eine Schnittstelle zuweisen.