Exprimez Java try-catch-finally avec scala.util.

«Try-catch-finally» de Java ne détecte pas les erreurs fatales, «Try-catch-finally» de Scala détecte également des erreurs fatales. Les exceptions fatales bien connues incluent ʻOutOfMemoryError`, et de telles exceptions fatales ne doivent pas être interceptées dans le programme.

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

Par conséquent, dans Scala, il est courant (?) D'intercepter les exceptions en utilisant scala.util.Try au lieu de try-catch-finally. scala.util.Try, comme try-catch-finally de Java, ne détecte que les erreurs non fatales (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

Mais scala.util.Try devient Failure lorsqu'une exception est levée, et il n'y a pas de mécanisme comme finally pour faire quelque chose à la fin. Je veux "enfin" même dans Scala. Je pense qu'il y a un tel moment.

Dans un tel cas, il existe un moyen d'utiliser scala.util.control.Exception.ultually. Vous pouvez atteindre `` enfin '' en passant la dernière action à entreprendre, qu'une exception se produise ou non.

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)

De cette manière, vous pouvez ignorer les erreurs fatales et ne détecter que les erreurs non fatales. Bien sûr, si vous n'avez pas besoin d'utiliser finally, vous n'avez pas besoin non plus de ʻultimement`.

Les références

Il n'existe que deux articles japonais sur scala.util.control.Exception.

Postscript

Comme vous l'avez commenté, le try-catch-finally de Scala aussi La correspondance de motifs avec Catch en utilisant NonFatal ne peut capturer que les non fatales.

NonFatal Exception --scala_text

Recommended Posts

Exprimez Java try-catch-finally avec scala.util.
Exprimer l'échec en Java
Partition en Java
Changements dans Java 11
Janken à Java
Taux circonférentiel à Java
FizzBuzz en Java
Lire JSON en Java
Implémentation de l'interpréteur par Java
Faites un blackjack avec Java
Application Janken en Java
NVL-ish guy en Java
Joindre des tableaux en Java
"Hello World" en Java
Interface appelable en Java
Commentaires dans la source Java
Fonctions Azure en Java
Formater XML en Java
Implémentation Boyer-Moore en Java
Hello World en Java
Utiliser OpenCV avec Java
Mémorandum WebApi avec Java
Détermination de type en Java
Exécuter des commandes en Java (ping)
Divers threads en java
Implémentation du tri de tas (en java)
API Zabbix en Java
Art ASCII à Java
Comparer des listes en Java
POST JSON en Java
Créer JSON en Java
Manipulation de la date dans Java 8
Nouveautés de Java 8
Utiliser PreparedStatement en Java
Nouveautés de Java 9,10,11
Exécution parallèle en Java
Essayez d'utiliser RocksDB avec Java
Lire des fichiers binaires en Java 1
Évitez l'erreur que Yuma a donnée en Java
Obtenir des informations EXIF en Java
[Neta] Sleep Sort en Java
Modifier ini en Java: ini4j
L'histoire de Java dans ce monde
Segfo Java en 6 lignes
Essayez d'appeler JavaScript en Java
Essayez de développer Spresense avec Java (1)
Essayez le type fonctionnel en Java! ①
J'ai fait une roulette à Java.
Implémentation de l'authentification en deux étapes en Java
Refactoring: faire du Blackjack en Java
Ecrire des rappels de vol en Java
Analyse de sujets (LDA) en Java
Importer des données Excel avec Java 2
Prétraitement NEologd en Java neologdn-java
Changer le codage Java dans Windows
API Java Stream en 5 minutes
Problème de ne pas trouver javax.annotation.Généré en Java 11