Der Grund, warum Sie Schwierigkeiten haben, die Bedeutung funktionaler Schnittstellen wie der in zu java.util.function
verstehen, ist, dass die hier definierten Schnittstellen keine Bedeutung haben! Sie sind hauptsächlich vorhanden, um die Struktur darzustellen , nicht die Semantik .
Dies ist für die meisten Java-APIs untypisch. Die typische Java-API, z. B. eine Klasse oder Schnittstelle, hat eine Bedeutung, und Sie können ein mentales Modell für das, was es darstellt, entwickeln und dieses verwenden, um die Operationen darauf zu verstehen. Betrachten Sie java.util.List
zum Beispiel. A List
ist ein Container mit anderen Objekten. Sie haben eine Sequenz und einen Index. Die Anzahl der in der Liste enthaltenen Objekte wird von zurückgegeben size()
. Jedes Objekt hat einen Index im Bereich 0..size-1 (einschließlich). Das Objekt am Index i kann durch Aufrufen abgerufen werden list.get(i)
. Und so weiter.
Die funktionalen Schnittstellen in java.util.function
haben keine solche Bedeutung. Stattdessen handelt es sich um Schnittstellen, die lediglich die Struktur einer Funktion darstellen, z. B. die Anzahl der Argumente, die Anzahl der Rückgabewerte und (manchmal), ob ein Argument oder ein Rückgabewert ein Grundelement ist. Wir haben also so etwas wie Function<T,R>
eine Funktion, die ein einzelnes Argument vom Typ T verwendet und einen Wert vom Typ R zurückgibt . Das ist es. Was macht diese Funktion? Nun, es kann alles ... solange es ein einzelnes Argument benötigt und einen einzelnen Wert zurückgibt. Aus diesem Grund ist die Angabe für Function<T,R>
kaum mehr als "Stellt eine Funktion dar, die ein Argument akzeptiert und ein Ergebnis erzeugt."
Wenn wir Code schreiben, hat er eindeutig eine Bedeutung, und diese Bedeutung muss von irgendwoher kommen. Bei den Funktionsschnittstellen ergibt sich die Bedeutung aus dem Kontext, in dem sie verwendet werden. Die Schnittstelle Function<T,R>
hat für sich genommen keine Bedeutung. In der java.util.Map<K,V>
API gibt es jedoch Folgendes:
V computeIfAbsent(K key, Function<K,V> mappingFunction)
(Platzhalter wurden der Kürze halber entfernt)
Ah, diese Verwendung Function
ist als "Mapping-Funktion". Was macht das? Wenn in diesem Zusammenhang key
nicht bereits in der Karte vorhanden ist, wird die Zuordnungsfunktion aufgerufen und der Schlüssel übergeben, und es wird erwartet, dass ein Wert erzeugt wird, und das resultierende Schlüssel-Wert-Paar wird in die Karte eingefügt.
Sie können sich also nicht die Spezifikation Function
(oder eine der anderen funktionalen Schnittstellen) ansehen und versuchen, zu erkennen, was sie bedeuten. Sie müssen sich ansehen, wo sie in anderen APIs verwendet werden, um zu verstehen, was sie bedeuten. Diese Bedeutung gilt nur für diesen Kontext.
Consumer
undSupplier
Sie können auch die Suche Tutorial fürConsumer
...