Funktionale Schnittstelle in Java

vish234

Mitglied
Dadurch bin ich mit funktionalen Schnittstellen in Java und deren Verwendung mittels Lambda-Ausdrücken vertraut. In einer funktionalen Schnittstelle kann es nur eine abstrakte Methode geben. Da es nur eine abstrakte Methode in der Schnittstelle gibt, versteht der Compiler, dass dies die Methode ist, auf die Sie zugreifen, wenn Sie diese einsame Methode aus einem Lambda-Ausdruck verwenden.
Beispiel:
Java:
// Functional Interface:

@FunctionalInterface
public interface Ball
{
    void hit();
}

// Lambda to define, then run the hit method:

Ball b = () -> System.out.println("You hit it!");

b.hit();

Obwohl es offensichtlich ist, warum eine funktionale Schnittstelle nur eine abstrakte Methode haben kann, sehe ich nicht ein, warum diese Methode nicht überladen werden kann.

Folgendes wird beispielsweise nicht kompiliert:

Java:
// (NOT) Functional Interface:

@FunctionalInterface
public interface Ball
{
    void hit();
    void hit(boolean miss);
}

// Lambda to define, then run the hit method:

Ball b = () -> System.out.println("You hit it!");
Ball ba = (boolean miss) -> System.out.println(miss);

b.hit();
ba.hit(false);

Der Compiler behauptet, dass die Ball-Schnittstelle nicht funktionsfähig ist, da sie mehr als eine Methode ähnlich dieser instance enthält, aber ich verstehe nicht, warum dies in diesem Fall ein Problem sein sollte - solange die beiden Methoden unterschiedliche Parameter annehmen, sollte es sein Es ist möglich, anhand der von mir definierten Parameter abzuleiten, auf welche Methode ich mich im Lambda beziehe.
Jede Hilfe wäre sehr willkommen.
 
Zuletzt bearbeitet von einem Moderator:

httpdigest

Top Contributor
Es gibt keine Syntax für einen Lambda-Ausdruck in Java, um alle im Zweifel überladenen Methoden eines Interfaces auch zu implementieren.
Die "Pfeil"-Syntax erlaubt ja nur das Implementieren einer kompatiblen Interface-Methode.
Um deinen Code von oben zu verwenden, was sollte denn bei folgendem Aufruf passieren?
Java:
Ball b = () -> System.out.println("You hit it!");
b.hit(false);
b ist ja weiterhin ein Ball, hat also zwei Methoden, von der aber nur eine auch eine Implementierung hat.
 

KonradN

Super-Moderator
Mitarbeiter
Ein funktionales Interface ist ein Interface mit genau einer abstrakten Methode. Das ist einfach die Definition:
Java Language Specification 9.8:
A functional interface is an interface that is not declared sealed and has just one abstract method (aside from the methods of Object), and thus represents a single function contract. This "single" method may take the form of multiple abstract methods with override-equivalent signatures inherited from superinterfaces; in this case, the inherited methods logically represent a single method.

In Java ist die JLS sowas wie die Naturgesetze in unserer Welt: Es ist nun einmal so. Man kann es zwar hinterfragen (In der Physik wäre dann die Frage: "Wieso ziehen sich zwei Massen an?" und da kann man dann mit Theorien wie Gravitonen und so kommen ... aber es hat für uns erst einmal keine Relevanz. Lasse ich mein Glas fallen, fällt es runter und geht kaputt.)

Wenn Du etwas in der Art brauchst, dann ist evtl. eine default Methode sinnvoll? Das wäre dann etwas wie:

Java:
public interface Ball
{
    default void hit() { hit(false); }
    void hit(boolean miss);
}

Dann hast Du nur eine Methode zu schreiben: hit(boolean) - aber es gibt dann halt eine default Methode hit().
 

Blender3D

Top Contributor
Der Compiler behauptet, dass die Ball-Schnittstelle nicht funktionsfähig ist, da sie mehr als eine Methode ähnlich dieser instance enthält, aber ich verstehe nicht, warum dies in diesem Fall ein Problem sein sollte - solange die beiden Methoden unterschiedliche Parameter annehmen,
Methoden unterscheiden sich anhand des Methodennamens und der Methodensignatur.
--> hit() != hit(boolean) --> Es handelt sich hierbei um 2 verschiedene Methoden.
Obwohl es offensichtlich ist, warum eine funktionale Schnittstelle nur eine abstrakte Methode haben kann, sehe ich nicht ein, warum diese Methode nicht überladen werden kann.
Da du verstehst, dass eine funktionale Schnittstelle eindeutig sein muss, kann das was du hier versuchst gar nicht funktionieren.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Funktionale Programmierung, OO- Programmierung, ... Allgemeine Java-Themen 9
Tarrew OpenAPI Schnittstelle - Mehrere Kunden mit unterschiedlichen Zugriffsrechten Allgemeine Java-Themen 2
B Schnittstelle zwischen MySQL und Apache Allgemeine Java-Themen 8
J Daten über serielle Schnittstelle empfangen Allgemeine Java-Themen 4
Meeresgott Best Practice Mini REST-Schnittstelle Allgemeine Java-Themen 4
Q Selbständig ActionEvent auslösen zum Daten senden über serielle Schnittstelle Allgemeine Java-Themen 7
stroggi Serielle Schnittstelle (jssc) - Flush benötigt? Allgemeine Java-Themen 2
P Schnittstelle java Programm zu Webserver / Browser Allgemeine Java-Themen 2
T Input und Outputstream , serielle Schnittstelle Allgemeine Java-Themen 1
M Schnittstelle Datanorm Allgemeine Java-Themen 2
H Daten via COM Schnittstelle erhalten Allgemeine Java-Themen 2
I Java - perfekte Schnittstelle für Hacker? Allgemeine Java-Themen 8
M Java-Pawn Schnittstelle ? Allgemeine Java-Themen 0
S Threads Serielle Schnittstelle mit Listener / Aufrufendes GUI Allgemeine Java-Themen 4
L COM Schnittstelle in Java programmieren Allgemeine Java-Themen 4
T Schnittstelle zu Bash?! Allgemeine Java-Themen 2
D Aufgabe: Schnittstelle und Proxy implementieren Allgemeine Java-Themen 2
H Interface Generische Schnittstelle (rekusiv) Allgemeine Java-Themen 2
M Serielle Schnittstelle ansteuern - mit Processing Bibliothek Allgemeine Java-Themen 4
B Schnittstelle von Facebook zu Java(Eclipse) für meine Internetseite Allgemeine Java-Themen 20
U Realisierung einer "Plugin-Schnittstelle": Allgemeine Java-Themen 12
I Serielle Schnittstelle Allgemeine Java-Themen 5
A Input/Output Applet-Zugriff auf PHP-Schnittstelle (externer Server) Allgemeine Java-Themen 22
M Schnittstelle für durchgereichte Interaktionen in Komponentenhierarchie? Allgemeine Java-Themen 3
P Auslesen serieller Schnittstelle - umwandeln von byteArray Allgemeine Java-Themen 3
N Serielle Schnittstelle / COM-Port auslesen und die empfangenen Daten verarbeiten Allgemeine Java-Themen 1
O Zugriff auf Serielle Schnittstelle - Keine Ports gefunden. Allgemeine Java-Themen 8
S Problem mit serieller Schnittstelle Allgemeine Java-Themen 10
M Zugriff auf Parallel-Schnittstelle Allgemeine Java-Themen 2
P Schnittstelle über Webservice SOAP Allgemeine Java-Themen 11
MQue Schnittstelle programmieren Allgemeine Java-Themen 2
H lpt1 schnittstelle Allgemeine Java-Themen 6
M Schnittstelle java.util.Set Allgemeine Java-Themen 9
G Kommunikation mit der seriellen Schnittstelle Allgemeine Java-Themen 6
G serielle Schnittstelle einlesen Allgemeine Java-Themen 13
M Paralle Schnittstelle ansprechen Allgemeine Java-Themen 2
P TCPIP Schnittstelle Allgemeine Java-Themen 2
D Datenübertragung über serielle Schnittstelle Allgemeine Java-Themen 4
D Daten aus einer Seriellen Schnittstelle empfangen Allgemeine Java-Themen 22
G Problemme mit serielle Schnittstelle Allgemeine Java-Themen 9
MQue serielle Schnittstelle Allgemeine Java-Themen 2
E serielle Schnittstelle Allgemeine Java-Themen 6
N Serielle Schnittstelle ansprechen Allgemeine Java-Themen 9
D HTML Schnittstelle Allgemeine Java-Themen 4
J serielle Schnittstelle unter Linux Allgemeine Java-Themen 3
T parallele Schnittstelle auslesen Allgemeine Java-Themen 5
S Problem mit Ansteuerung von serieller Schnittstelle Allgemeine Java-Themen 7
Q Schnittstelle/Abstrakte Klasse schreibt Annotation vor? Allgemeine Java-Themen 4
W Zugriff auf lokale serielle Schnittstelle via Applet Allgemeine Java-Themen 3
T Java Schnittstelle Active Directory Allgemeine Java-Themen 5
Q Typecast zwischen Klassen mit implementierter Schnittstelle Allgemeine Java-Themen 4
M RS232 Schnittstelle ansteuern (Floppy durch Laptop ersetzen) Allgemeine Java-Themen 2
Z java->schnittstelle->excel Allgemeine Java-Themen 2
V gezielte Datenbankeinträge über JDBC schnittstelle Allgemeine Java-Themen 10
A Serielle Schnittstelle | Barcodescan | ohne Tastatur Allgemeine Java-Themen 11
H javax.comm und Parallele Schnittstelle (PIN für PIN) Allgemeine Java-Themen 7
X Java Schnittstelle zu AIML Allgemeine Java-Themen 2
S String an COM-Schnittstelle senden Allgemeine Java-Themen 6
D Schnittstelle zwischen zwei Klassen? Allgemeine Java-Themen 2
J PS/2-Schnittstelle ansprechen Allgemeine Java-Themen 7
Y Zugriff auf Com-Schnittstelle Allgemeine Java-Themen 5
S Abhören der com-Schnittstelle Allgemeine Java-Themen 3
H Zugriff auf parallele Schnittstelle Allgemeine Java-Themen 4
G Zugriff auf serielle Schnittstelle mit Java 1.5.0 Allgemeine Java-Themen 11
C Implementieren einer Schnittstelle (Interface), Ausnahmen Allgemeine Java-Themen 7
J serielle schnittstelle unter linux Allgemeine Java-Themen 3
OnDemand Java Deployment Vaadin Allgemeine Java-Themen 0
D Hat Java eine Library um JavaScript auszuwerten? Allgemeine Java-Themen 2
Zrebna Wieso sind eigentlich JUnit-Tests in src/test/java platziert - nur Konvention? Allgemeine Java-Themen 7
N LlaMA, KI, java-llama.cpp Allgemeine Java-Themen 39
V Java-Codierungsherausforderung: Navigieren durch die Macken der Datumsmanipulation Allgemeine Java-Themen 2
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
M java: unexpected type Allgemeine Java-Themen 2
harrytut Java Input/Output Tests Junit Allgemeine Java-Themen 3
B Java Discord bot auf ein Root Server? Allgemeine Java-Themen 1
BetziTheRealOne Java PKIX path building failed as non Admin Allgemeine Java-Themen 15
D Linux, Java-Version wird nicht erkannt bzw. welche Einstellung fehlt noch? Allgemeine Java-Themen 19
KonradN Java 21 Release Allgemeine Java-Themen 5
V Umgang mit fehlenden Daten in einer Java-Datenanalyseanwendung Allgemeine Java-Themen 5
P Fehler: Hauptklasse Main konnte nicht gefunden oder geladen werden Ursache: java.lang.ClassNotFoundException: Main Allgemeine Java-Themen 24
K Java Anwendung machen Anleitung Allgemeine Java-Themen 5
G java.io.listFiles() Allgemeine Java-Themen 3
8u3631984 Frage zu Java Streams min / max Allgemeine Java-Themen 17
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
K Java-Projekt Allgemeine Java-Themen 11
K Java-Projekt Allgemeine Java-Themen 0
ruutaiokwu Welcher Browser unterstützt heutzutage noch Java Applets? Allgemeine Java-Themen 5
Jose05 Java-Klasse im extra cmd-Fenster ausführen Allgemeine Java-Themen 3
rode45e Java Threads Allgemeine Java-Themen 4
G java.io.listFiles() Allgemeine Java-Themen 2
N Java Dynamic Proxy Allgemeine Java-Themen 3
N Leichte Java Gegner Ki Allgemeine Java-Themen 10
A Java modul Problem Allgemeine Java-Themen 4
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
OnDemand Java String in Hashmap als Key NULL Allgemeine Java-Themen 27
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
berserkerdq2 Wenn ich bei Intelij javafx mit maven importieren will, muss ich das in die pom.xml reintun, aber warum noch in module-info.java? Allgemeine Java-Themen 3
KonradN Java 20 am 21. März Allgemeine Java-Themen 1
O Java Website Stock Bot Allgemeine Java-Themen 3
J Front-/Backend in Java Allgemeine Java-Themen 14

Ähnliche Java Themen

Neue Themen


Oben