Wie kommt es, dass Lambda-Ausdrücke Objekte in Java sind? [Duplikat]

Nov 06 2020

Wie sind Lambda-Ausdrucksobjekte in Java? Wie können Lambda-Ausdrücke, die Teil der funktionalen Programmierung sind, in Java implementiert werden, einer objektorientierten Sprache? Welche Java-Konzepte brauche ich, um Lambda-Ausdrücke zu verstehen?

Antworten

2 JakubZnamenáček Nov 06 2020 at 19:17

Sie müssen einige Dinge verstehen:

1) Funktionsschnittstelle

  • Schnittstelle, die nur eine öffentliche Methode hat
public interface Runnable{
    void run();
}
  • Dies ist ein Beispiel für eine funktionale Schnittstelle. Sie kann verschiedene Arten von Methoden wie int haben processNumber(int number)
  • Denken Sie daran, dass es nur eine Methode geben kann (eine nicht implementierte Methode, Standardeinstellungen zählen nicht).

2) Funktionsschnittstelle verwenden

  • Sie können Ihre funktionale Schnittstelle in Ihrer Klasse implementieren, sagen wir MyRunnable
public class MyRunnable implements Runnable{
    public void run(){
        System.out.println("Hello world");
    }
}
  • als Sie Ihre MyRunnable-Klasse in einer anderen Methode übergeben können, ist es nur ein normales Objekt
public class MyClass{
    public void myMethod(Runnable runnable){
        runnable.run();
    }
}
  • dies würde "Hallo Welt" drucken
public static void main{
    MyClass myClass = new MyClass();
    myClass.myMethod(new MyRunnable());
}

3) Was Lambda tut

  • Mit Lambda können Sie also eine anonyme Implementierung der Schnittstelle erstellen
public static void main{
    MyClass myClass = new MyClass();
    myClass.myMethod(() -> System.out.println("Hello my world"));
}
  • dies würde "Hallo meine Welt" drucken
  • Sie erstellen lediglich eine anonyme Implementierung von Runnable und übergeben sie an MyMethod
  • es ist nur syntaktischer Zucker dafür
public static void main{
    MyClass myClass = new MyClass();
    myClass.myMethod(new Runnable{
        public void run(){
            System.out.println("Hello my world");
        });
}
1 m0skit0 Nov 06 2020 at 17:50

Ein Lambda in Java ist im Grunde nur eine funktionale Schnittstelle . Es ist hauptsächlich syntaktischer Zucker .

Java ist keine funktionale Sprache und kann daher die funktionale Programmierung nicht vollständig implementieren, sondern nur einen Teil seiner Grundprinzipien. Beispielsweise können Sie in Java keine geeigneten Typklassen implementieren .

In jedem Fall gibt es keine Standarddefinition für FP, genauso wie es keine Standarddefinition für OOP gibt. Die spezifische Definition kann je nach Quelle variieren, aber die Gesamtideen sind (normalerweise) dieselben.

Coder Nov 06 2020 at 19:04

Java ist eine objektorientierte Sprache. Einige Funktionen aus funktionalen Sprachen sind jedoch auch in Java verfügbar, wie z. B. Lambda

Lambda ist im Grunde ein Objekt, das wie eine Funktion wirkt. Dokumentation:https://docs.oracle.com/javase/8/docs/api/java/util/function/Function.html

Wie üblich hat eine Funktion einen Eingang und einen Ausgang

Eingaben in Funktionen: bezeichnet als T (wie in take)

Ausgänge in Funktion: bezeichnet als R (wie im Gegenzug)

Struktur der Erklärung: Function<T,R> var_name = input_variables -> output_expression

Beispiel: Function<Double,Double> Sigmoid = x->(1/( 1 + Math.pow(Math.E,(-1*x))));

oder es gibt einen anderen Weg (auch als Methodenreferenz bekannt)

Dies greift tatsächlich auf die Methode unter der Haube zu

Function<T,R> var_name = class_name :: method_name

Beispiel: Function<Double,Double>Tanh = Math::tanh

Verwenden einer Funktion

Um eine Funktion zu verwenden, müssen Sie nur die apply(T t)Methode der Funktionsklasse aufrufen

Beispiel: double num = sigmoid.apply(0)