Ich bin neu in Java 8, stieß ich auf Consumer Java Doc und es heißt: "Consumer wird erwartet, über Nebenwirkungen zu arbeiten." Könnte jemand bitte erklären, warum es so gesagt wird?Java 8 Verbraucher und Nebenwirkungen
Antwort
Gemäß der Consumer
javadoc muss ein Verbraucher mit einer Methode mit der Signatur void accept(T)
deklariert werden. Daher kann die Methode keinen Wert zurückgeben. Wenn es keine Nebenwirkung hätte, hätte es keinerlei Auswirkungen.
Danke. Ich habe dich verstanden. – user6348242
Die meisten funktionalen Schnittstellen sind nur so konzipiert, dass sie eine Eingabe akzeptieren, einige Berechnungen durchführen und eine Ausgabe zurückgeben. Sie sollen keinen Zustand ändern. Consumer
ist die Ausnahme, weil es keine Werte zurückgibt; Ihr Zweck besteht lediglich darin, einen Staat zu verändern.
Consumer hat Methode accept
mit der folgenden Signatur
void accept(T t);
Verfahren t als eine Eingabe nimmt und nichts zurückgibt (void), und damit kann man nichts von ihr zurückzukehren und das Verfahren ersetzen rufe mit dem Wert auf, den es zurückgibt.
Ein Beispiel für einen Nebeneffekt würde eine print-Anweisung nimmt
list.stream.foreach(System.out::println);
foreach Consumer als Argument. Wenn Sie darüber nachdenken, ist die einzige nützliche Sache, die Sie mit einer solchen Methode tun können, die Welt zu verändern (dh einen Zustand mutieren).
Das Gegenteil davon wäre ein pure function, eine Funktion, die keinen Staat nicht mutiert, ist es eine Eingabe nimmt und gibt etwas, zum Beispiel
Function<Integer,Integer> fn = x -> x*x;
fn
hier keine Nebenwirkungen hat (es mutiert nichts), es erhält eine Ganzzahl und gibt sein Quadrat friedlich zurück.
- 1. Verketten Verbraucher Java 8
- 2. Erzeuger Verbraucher in Java
- 3. Eine Java-Funktion und einen Verbraucher zusammenstellen
- 4. Kurzschlussauswertung und Nebenwirkungen
- 5. Angular2: Eigenschaftsbindung und Nebenwirkungen
- 6. RabbitMQ wie Nachricht von Java-Verbraucher
- 7. Nebenwirkungen freie Methoden in der Java-Standardbibliothek
- 8. Java: Berücksichtigt LinkedBlockingQueue die Reihenfolge der Verbraucher?
- 9. java frühling kaninchen thread pool in verbraucher
- 10. Java 8 Verschlüsse und Typerkennung
- 11. Java 8 thenApply() und thenAccept()
- 12. Java 8 LocalDateTime und DateTimeFormatter
- 13. Java 8 streams und varargs
- 14. LibGDX und Java 8 Quellkompatibilität
- 15. Apache Camel Produzenten und Verbraucher
- 16. Separation Sellerie Verbraucher und Produzent
- 17. Kafka vertica Verbraucher und Ausleittisch
- 18. sem_wait() in Hersteller und Verbraucher
- 19. Suspend Verbraucher in Produzent/Verbraucher Muster
- 20. MaxPermSize Warnung in Eclipse WildFly 8 und Java 8
- 21. Java 8 funktionale Schnittstelle (Consumer) zusätzlicher Parameter
- 22. Offset und Verzögerung für kafka Verbraucher (über neue Verbraucher api erstellt) werden auf unbekannte
- 23. clj-kafka - Verbraucher leer
- 24. Was sind Nebenwirkungen in der funktionalen Programmierung?
- 25. Verwirrt über Nebenwirkungen/ContinueAfter
- 26. Java 8 Summe und insgesamt nicht
- 27. Java 8-Streams und einfache Typen
- 28. Java 8 Strom und Gruppierung der Liste
- 29. Parallelism und Flatmap in Java 8 Streams
- 30. Lambdas und Generika in Java 8
Wenn Sie mit der funktionalen Programmierung nicht vertraut sind, wird Ihnen diese Sprache nicht viel bedeuten. Die Idee ist, dass "reine" Funktionen nur von ihren Eingaben lesen und nur auf ihre Rückgabewerte schreiben sollten (damit es keine Nebenwirkungen gibt - der einzige Effekt der Ausführung der Funktion ist, dass Sie den Rückgabewert erhalten.) Funktionen, die sich ändern etwas (ändern Sie eine Datenstruktur, laufen IO, usw.), werden gesagt, um Nebenwirkungen zu haben. Eine Funktion ohne Rückgabewert hätte besser Nebenwirkungen, sonst macht sie nichts. –