Genaue definition von "functional interface" in Java 8
Vor kurzem begann ich, zu erforschen Java 8 und ich kann nicht ganz verstehen, das Konzept der "funktionale Oberfläche", die ist unverzichtbar, um Java-Implementierung von lambda-Ausdrücken. Es ist ein ziemlich umfassende Anleitung zu lambda-Funktionen in Java, aber ich blieb stecken auf das Kapitel, das gibt die definition auf das Konzept der funktionalen Schnittstellen. Die definition lautet:
Genauer gesagt, ein funktionales interface ist definiert als eine Schnittstelle, die genau eine abstrakte Methode.
Dann geht er auf Beispiele, von denen Comparator
Schnittstelle:
public interface Comparator<T> { int compare(T o1, T o2); boolean equals(Object obj); }
War ich in der Lage zu testen, ich kann mit einer lambda-Funktion an Stelle der Komparator argument und es funktioniert(d.h. Collections.sort(list, (a, b) -> a-b)
).
Aber in der Komparator-Schnittstelle compare
und equals
Methoden sind Abstrakt, das heißt, es hat zwei abstrakte Methoden. Wie kann das also funktionieren, wenn die definition erfordert eine Schnittstelle zu haben genau eine abstrakte Methode? Was vermisse ich hier?
InformationsquelleAutor Anton Cherkashyn | 2013-02-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aus der gleiche Seite, die Sie verlinkt:
Kann ich nicht wirklich sagen, dass es besser wird.
Edit: Aktualisiert, um den letzten text auf dieser Seite, per Maurice ' s Kommentar (danke!)
Ich könnte sagen, dass es ein bisschen besser, obwohl, weil, dass ist nicht genau Recht. Eine Klausel in die JLS sagt, dass müssen die Schnittstellen abstrakte Methoden deklarieren entsprechenden öffentlichen Methoden
Object
. Wenn Sie nicht so explizit, dann bekommen Sie implizite Deklarationen (die übliche situation). Diese Methoden haben aber, obwohl Abstrakt, zählen nicht bei der Entscheidung, ob ein interface hat eine "einzige" abstrakte Methode. Und dies ist unabhängig davon, ob Sie implizit oder explizit deklariert werden. Die FAQ-Seite, die du zitiert hast von nun Staaten die situation genau.Das kommt spät, aber ich habe aktualisiert die Antwort auf die Letzte text pro Ihre Klärung. Danke!
Könnte nicht besser sein, in der Tat.
InformationsquelleAutor Mark Peters
Andere Erklärung ist gegeben in der @FunctionalInterface Seite:
Können Sie testen, welche Schnittstelle ist die richtige funktionale Schnittstelle mit
@FunctionalInterface
.E. g.:
dies funktioniert
dies erzeugt eine Fehlermeldung:
InformationsquelleAutor ROMANIA_engineer
Q. Aber in den Comparator-interface sowohl compare() und equals () - Methoden sind Abstrakt, das heißt, es hat zwei abstrakte Methoden. Wie kann das also funktionieren, wenn die definition erfordert eine Schnittstelle zu haben, die genau eine abstrakte Methode? Was vermisse ich hier?
A.
Sie sehen die Einführung von Lambda-Abschnitt im oracle.com/technetwork/java/newtojava/java8book-2172125.pdf.
InformationsquelleAutor Aniket Thakur
Den Java-docs sagen:
Vielleicht Komparator ist das Besondere? Vielleicht, auch wenn es eine Schnittstelle gibt es irgendwie eine default-Implementierung von
equals()
aufruftcompare()
? Algorithmisch, es ist trivial.Ich dachte, alle Methoden, die in interfaces deklariert wurden, waren abstract (ich. e. keine default-Implementierung). Aber vielleicht bin ich etwas fehlt.
Comparator
ist nicht besonderes. Beim erstellen einer neuenComparator
Objekt erbt vonObject
einschließlich der konkretenequals
Methode. Ihr Kommentar, dass alle deklarierten Methoden in interfaces Abstrakt sind, ist nicht mehr wahr im Allgemeinen, aber es ist wahr, derequals
Methode inComparator
. Mein Kommentar zu Mark Peters' Antwort erklärt das mehr, oder sehen Sie sich die syntax Kommentar auf die Lambda-FAQ-Seite lambdafaq.org/what-is-a-functional-interfaceInformationsquelleAutor Seva Alekseyev
Definition:
Wenn ein interface enthält nur eine abstrakte Methode, dann ist ein solcher Typ der Schnittstelle, die aufgerufen wird die funktionale Schnittstelle.
Verwendung:
dann in diesem Zusammenhang benötigen wir Funktionelle Oberfläche.
Ausdruck.
Anzahl der Standard/statische Methoden.
Funktionalen Schnittstelle, die mit Bezug auf Vererbung:
Wenn eine Schnittstelle erweitert die Funktionale Schnittstelle und das Kind Schnittstelle enthält keine abstrakte Methode , dann ist das Kind Schnittstelle wird auch als Funktionale Schnittstelle.
Funktionales interface ist nicht neu in java, das bereits verwendet in folgenden interface-API:
InformationsquelleAutor Eswaran Venkatesan
Vor Java 8, eine Schnittstelle könnte nur erklären, ein oder mehrere Methoden, auch bekannt als Abstrakte Methode (Methode ohne Implementierung, nur die Signatur). Beginnend mit Java 8 eine Schnittstelle kann auch die Umsetzung von einem oder mehreren Methoden (kennt as-Interface-Standard-Methode) und statische Methoden zusammen mit abstrakten Methoden. Schnittstelle Default-Methoden default-Schlüsselwort markiert.
Also die Frage ist, was ist Funktionale Schnittstelle?
Eine Schnittstelle mit Single Abstract Method (SAM) genannte Funktionale Schnittstelle.
Was bedeutet -
Methoden und null oder mehr statische Methode ist auch eine gültige Funktionale
- Schnittstelle.
Ausführlicher mit Beispiel-code https://readtorakesh.blogspot.com/2018/08/functional-interface-java8.html
InformationsquelleAutor Rakesh Prajapati