[JAVA] Möchten Sie eine IOException aus dem Stream werfen? In diesem Fall

^Logo by Verwenden Sie Try oder Entweder von Vavr.

Gibt es so etwas?

image.png

Ein Fall, in dem Stream einen Wert verarbeitet und Sie eine aktivierte Ausnahme in einem Lambda-Ausdruck in der Mitte behandeln müssen.

Hinweis: Bitte denken Sie, dass "BookReader" schwer zu ändern ist, da es extern ist.

Gemeinsame Bewältigung

image.png

Ein Fall, in dem der Laufzeitfehler in RuntimeError geändert wird. Wenn Sie Fehler innerhalb einer Methode oder in einem privaten Bereich richtig behandeln, ist es bereits schwierig, Ausnahmen in die öffentliche Welt zu werfen. Ich mache mir auch Sorgen, dass ich das auch dann tun kann, wenn ich das jetzt nicht mache.

Sie sollten Stream zwangsweise verwenden

image.png

Richtig. Ich denke, es ist besser als einen RuntimeError zu werfen. Die Anzahl der lokalen Variablen hat sich von 0 auf 2 erhöht, die Codierungsmenge hat sich mehr als verdoppelt und die Verschachtelung ist 2 Ebenen tiefer, aber wenn das gesamte Team damit zufrieden ist, wäre es gut. ..

Hauptthema

Zum Beispiel verwendet Golang Tapples (eine Reihe von mehreren Instanzen), um anomale Ergebnisse an den Aufrufer weiterzugeben, aber Java unterstützt keine Tupel auf der Ebene der Sprachspezifikation. Sie können es ersetzen, indem Sie eine Klasse erstellen, aber für die funktionale Programmierung haben Scala und Haskell bessere Ideen.

Vavr ist eine Bibliothek, die die funktionale Programmierung in Java erleichtert.

Either

Eine Klasse, die entweder den Wert "Rechts" oder "Links" annimmt. Es ist üblich, für das normale System "Rechts" und für das abnormale System "Links" einzustellen. (Wortspiel)

Ich denke, es wäre schön, wenn Sie eine erweiterte Version von "Optional" haben könnten. Mit "Optional" können nur Informationen darüber gesendet werden, ob es "Null" ist oder nicht, aber mit "Entweder" können Werte wie Ausnahmen gesendet werden.

Try

Es ist eine Klasse zum Schreiben von try-catch als Funktionstyp. Sie können einen Lambda-Ausdruck erhalten, der eine aktivierte Ausnahme auslösen und ausdrücken kann, was passiert, wenn eine Ausnahme in Form eines Lambda auftritt.

Stellen Sie sich dies als eine "optionale" erweiterte Version vor, die entweder normale oder Ausreißer enthält, genau wie "entweder".

Wenn man nur die Atmosphäre betrachtet, scheint es, dass Try eine Option ist, aber in Try wird die Eingabe einer abnormalen Verarbeitung zu "Throwable" und Downcasting tritt häufig auf, sodass es Fälle gibt, in denen das Schreiben mit "Entweder" nicht schadet.

ich werde schreiben

Zum Beispiel denke ich, dass es so aussehen wird.

Either: image.png

Try: image.png

Beachten Sie, dass Try "Throws Throwable" ist. Wenn Sie richtig damit umgehen möchten, müssen Sie einen Downcast durchführen.

Apropos

Wenn Sie anfangen, Vavr fest zu verwenden, sieht es nicht mehr wie Java aus und ist schwer zu warten. Sie werden sich fragen, warum Sie Scala oder Haskell nicht verwenden. Es wird daher empfohlen, es als Prise zu verwenden.

Andere Lösungen

Sie müssen Java nicht zwangsweise weiter verwenden? Kann dem Chef empfohlen werden.

Verschiedene Gefühle

Ich frage mich, ob es um OSS geht ...

Recommended Posts

Möchten Sie eine IOException aus dem Stream werfen? In diesem Fall
Erstellen einer ArrayList, mit der Sie die Koordinaten einer zweidimensionalen Ebene eingeben und abrufen können
Ich möchte eine E-Mail in Java senden.
Ich möchte Schlangenfälle mit Tabellendefinitionen stoppen
Ich möchte eine Schleife schreiben, die auf einen Index mit der Stream-API von Java 8 verweist
Konvertieren Sie ein potenziell null-Array in einen Stream
Generieren Sie Stream aus einem Array primitiver Typen in Java
Die Geschichte von Collectors.groupingBy, die ich für die Nachwelt behalten möchte
Zusammenfassung der Probleme, bei denen ich mich nicht bei firebase anmelden konnte
Ich möchte den Wert von Attribute in Selenium of Ruby ändern
So ermitteln Sie die Länge einer Audiodatei mit Java
[Rails] Ich möchte Daten verschiedener Modelle in einem Formular senden
So konvertieren Sie ein Array von Strings mit der Stream-API in ein Array von Objekten
Mein Memorandum, dass ich ValidationMessages.properties UTF8 in Spring Boot erstellen möchte
Ich möchte bei der Registrierung in der Datenbank eine Fehlermeldung anzeigen
Ich möchte für jedes Array mit Lambda-Ausdruck in Java