Drücken Sie Java scal.util.Try aus

Javas try-catch-finally fängt keinen schwerwiegenden Fehler ab. Scalas "try-catch-finally" fängt auch schwerwiegende Fehler ab. Bekannte schwerwiegende Ausnahmen sind "OutOfMemoryError", und solche schwerwiegenden Ausnahmen sollten nicht im Programm abgefangen werden.

scala> try {
     |   throw new StackOverflowError
     | } catch {
     |   case e: Throwable => println("error")
     | }
error

Daher ist es in Scala üblich (?), Ausnahmen mit "scala.util.Try" anstelle von "try-catch-finally" abzufangen. scala.util.Try fängt wie Javas try-catch-finally nur nicht schwerwiegende Fehler ab (NonFatalError).

scala> Try(throw new StackOverflowError) recover {
     |   case e: Throwable => println("error")
     | }
java.lang.StackOverflowError
  at .$anonfun$res13$1(<console>:13)
  at scala.util.Try$.apply(Try.scala:209)
  ... 38 elided

Aber "scala.util.Try" wird zu "Failure", wenn eine Ausnahme ausgelöst wird, und es gibt keinen Mechanismus wie "finally", um am Ende etwas zu tun. Ich möchte "endlich" sogar in Scala. Ich denke, es gibt so eine Zeit.

In einem solchen Fall gibt es eine Möglichkeit, "scala.util.control.Exception.ultimate" zu verwenden. "Schließlich" kann erreicht werden, indem die letzte auszuführende Aktion übergeben wird, unabhängig davon, ob eine Ausnahme auftritt.

scala> Try {
     |   ultimately {
     |     println("finally !")
     |   } {
     |     println("do something")
     |     throw new Exception
     |     println("no execute")
     |   }
     | }
do something
finally !
res: scala.util.Try[Unit] = Failure(java.lang.Exception)

Auf diese Weise können Sie schwerwiegende Fehler ignorieren und nur nicht schwerwiegende Fehler abfangen. Wenn Sie nicht "endlich" verwenden müssen, brauchen Sie natürlich auch nicht "letztendlich".

Verweise

Es gibt nur zwei japanische Artikel über scala.util.control.Exception.

Nachtrag

Wie Sie kommentiert haben, auch Scalas "try-catch-finally" Der Mustervergleich mit "Catch" mit "NonFatal" kann nur nicht tödliche erfassen.

Nicht tödliche Ausnahme --scala_text

Recommended Posts

Drücken Sie Java scal.util.Try aus
Fehler in Java ausdrücken
Partisierung in Java
Änderungen in Java 11
Janken in Java
Umfangsrate in Java
FizzBuzz in Java
Lesen Sie JSON in Java
Interpreter-Implementierung durch Java
Machen Sie einen Blackjack mit Java
Janken App in Java
NVL-artiger Typ in Java
Verbinden Sie Arrays in Java
"Hallo Welt" in Java
Aufrufbare Schnittstelle in Java
Kommentare in der Java-Quelle
Azure funktioniert in Java
Formatieren Sie XML in Java
Boyer-Moore-Implementierung in Java
Hallo Welt in Java
Verwenden Sie OpenCV mit Java
WebApi-Memorandum mit Java
Typbestimmung in Java
Befehle in Java ausführen (Ping)
Verschiedene Threads in Java
Implementierung der Heap-Sortierung (in Java)
Zabbix API in Java
ASCII-Kunst in Java
Listen in Java vergleichen
POST JSON in Java
Erstellen Sie JSON in Java
Datumsmanipulation in Java 8
Was ist neu in Java 8?
Verwenden Sie PreparedStatement in Java
Was ist neu in Java 9,10,11
Parallele Ausführung in Java
Versuchen Sie es mit RocksDB mit Java
Lesen Sie Binärdateien in Java 1
Vermeiden Sie den Fehler, den Yuma in Java gemacht hat
Holen Sie sich EXIF-Informationen in Java
[Neta] Sleep Sort in Java
Bearbeiten von ini in Java: ini4j
Java-Geschichte in dieser Welt
Segfo Java in 6 Zeilen
Versuchen Sie, JavaScript in Java aufzurufen
Lassen Sie uns Spresense mit Java entwickeln (1)
Probieren Sie den Funktionstyp in Java aus! ①
Ich habe ein Roulette in Java gemacht.
Implementierung der zweistufigen Authentifizierung in Java
Refactoring: Machen Sie Blackjack in Java
Schreiben Sie Flyway-Rückrufe in Java
Themenanalyse (LDA) in Java
Importieren Sie Excel-Daten mit Java 2
NEologd-Vorverarbeitung in Java neologdn-java
Ändern Sie die Java-Codierung in Windows
Java Stream API in 5 Minuten
Problem beim Finden von javax.annotation.Generated in Java 11 nicht