JavaRush /Java-Blog /Random-DE /Einführung in funktionale Schnittstellen
minuteman
Level 32

Einführung in funktionale Schnittstellen

Veröffentlicht in der Gruppe Random-DE
Bitte trollen Sie nicht zu viel, ich fange gerade erst an, Artikel zu übersetzen Einführung in funktionale Schnittstellen - 1

Einführung in funktionale Schnittstellen – in Java 8 neu erstellte Konzepte

Jeder Java-Entwickler auf der Welt hat mindestens einmal eine der folgenden Schnittstellen verwendet: java.lang.Runnable, java.awt.event.ActionListener, java.util.Comparator, java.util.concurrent.Callable. Eines haben sie alle gemeinsam: Sie haben alle nur eine Methode. Es gibt viele weitere solcher Schnittstellen im JDK sowie andere, die von Java-Entwicklern erstellt wurden. Single Abstract Method interfacesDiese Schnittstellen werden auch als (SAM-Schnittstellen) bezeichnet . Eine der beliebtesten Möglichkeiten, diese Schnittstellen zu verwenden, besteht darin, anonyme innere Klassen zu erstellen, die diese Schnittstellen verwenden, wie im folgenden Beispiel:
public class AnonymousInnerClassTest {
    public static void main(String[] args) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("A thread created and running...");
            }
        }).start();
    }
}
In Java 8 wird das SAM-Konzept neu erstellt und als funktionale Schnittstellen bezeichnet. Sie können mithilfe von Lambda-Ausdrücken, Methodenreferenzen und Referenzkonstruktoren dargestellt werden. Es wurde eine neue @FunctionalInterface-Annotation erstellt, die verwendet wird, um Fehler auf Compilerebene auszulösen, wenn die von Ihnen annotierte Schnittstelle auf Funktionsebene nicht funktioniert. Schauen wir uns eine einfache funktionale Schnittstelle mit einer abstrakten Methode an:
@FunctionalInterface
public interface SimpleFunInterface {
    public void doWork();
}
Eine Schnittstelle kann auch abstrakte Methoden einer Klasse deklarieren java.lang.Object, in diesem Fall kann die Schnittstelle jedoch auch als funktional deklariert werden:
@FunctionalInterface
public interface SimpleFuncInterface {
    public void doWork();
    public String toString();
    public Boolean equals(Object o);
}
Sobald Sie der Schnittstelle eine weitere abstrakte Methode hinzugefügt haben, markiert die IDE diese als fehlerhaft wie im Bild: Einführung in funktionale Schnittstellen - 2
Was gibt es sonst noch zu lesen:

Zufällige Gruppe:

Eine Schnittstelle kann von einer anderen Schnittstelle erben; wenn die Schnittstelle von einer funktionalen Schnittstelle erbt und keine neuen abstrakten Methoden enthält, dann ist diese Schnittstelle ebenfalls funktionsfähig. Eine Schnittstelle kann jedoch nur eine abstrakte Methode und viele Standardmethoden enthalten und wird dennoch als funktionsfähig betrachtet.
@FunctionalInterface
public interface ComplexFunctionalInterface extends SimpleFuncInterface {
    default public void doSomeWork() {
        System.out.println("Doing some work in interface impl...");
    }
    default public void doSomeWork() {
        System.out.println("Doing some other work in interface impl...");
    }
}
Das Top-Beispiel ist immer noch eine funktionale Schnittstelle. Schauen wir uns nun an, wie wir Lambda-Ausdrücke verwenden können, um eine anonyme innere Klasse zu ersetzen und funktionale Schnittstellen zu implementieren:
/*
*Implementation the interface by creating an
*anonymoous inner class versus using
*lambda expression.
*/
public class SimpleFunInterfaceTest {
    public static void main(String[] args) {
        carryOutWork(new SimpleFunInterface() {
            @Override
            public void doWork() {
                System.out.println("Do work in SimpleFun impl...");
            }
        });
        carryOutWork(() -> System.out.println("Do work in lambda exp impl..."));
    }
    public static void carryOutWork(SimpleFuncInterface sfi) {
        sfi.work();
    }
}
Das Ergebnis des Programms wird wie folgt sein:
Do work in SimpleFun impl...
Do work in lambda exp impl...
Falls Sie eine IDE verwenden, die die Java-Lambda-Ausdruckssyntax unterstützt (Netbeans 8 Nightly-Builds), erhalten Sie einen Hinweis zur Verwendung anonymer innerer Klassen: Einführung in funktionale Schnittstellen - 3 Dies war eine kurze Einführung in das Konzept der funktionalen Schnittstellen in Java 8 und wie diese implementiert werden können Verwendung von Lambda-Ausdrücken.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION