Probieren Sie::Tiny – Minimal try/catch mit der richtigen Konservierung von . Dieses Modul bietet nackte Knochen try/catch/finally-Anweisungen, die entwickelt wurden, um häufige Fehler mit Eval-Blöcken zu minimieren, und NICHTS anderes. Der catch-Block wird in einem topicalizer-Kontext (z. B. einem bestimmten Block) aufgerufen, aber beachten Sie, dass Sie keinen nützlichen Wert aus catch mit den when-Blöcken ohne explizite Rückgabe zurückgeben können. Dieses Texturpaket wurde entwickelt, um in 1.12 zu arbeiten, also stellen Sie sicher, dass Sie es mit dieser Version verwenden und dann sind Sie gut zu gehen! Innerhalb des try-Blocks ist dies nicht verfügbar, daher müssen Sie Die Argumentliste kopieren. Falls Sie mit Argumentwerten direkt über die Aliasing-Funktion arbeiten möchten (d.h. erlauben Sie es mit „_[1] = „foo“), müssen Sie den Verweis über die Angabe von `_ übergeben: Wenn ein Fehler aufgetreten ist und die zweite Unterroutine angegeben wurde, wird sie mit dem Fehler in ._ (lokalisiert) und als erstes und einziges Argument dieses Blocks aufgerufen. Wenn jedoch in diesem Beispiel die Methoden readLine und Close beide Ausnahmen auslösen, löst die Methode readFirstLineFromFileWithFinallyBlock die Ausnahme aus, die aus dem finally-Block ausgelöst wird. Die aus dem try-Block ausgelöste Ausnahme wird unterdrückt. Im Gegensatz dazu löst im Beispiel readFirstLineFromFile, wenn Ausnahmen sowohl aus dem try-Block als auch aus der try-with-resources-Anweisung ausgelöst werden, die Methode readFirstLineFromFile die Auslösung der Ausnahme aus, die aus dem try-Block ausgelöst wird. Die Ausnahme, die aus dem Try-with-Resources-Block ausgelöst wird, wird unterdrückt. In Java SE 7 und höher können Sie unterdrückte Ausnahmen abrufen.

Weitere Informationen finden Sie im Abschnitt Unterdrückte Ausnahmen. Vor Java SE 7 können Sie einen finally-Block verwenden, um sicherzustellen, dass eine Ressource geschlossen wird, unabhängig davon, ob die try-Anweisung normal oder abrupt abgeschlossen wird. Im folgenden Beispiel wird ein finally-Block anstelle einer try-with-resources-Anweisung verwendet: Beachten Sie, dass das Hinzufügen eines finally-Blocks ohne vorherigen catch-Block alle Fehler unterdrückt. Dieses Verhalten stimmt mit der Verwendung eines eigenständigen Evals überein, entspricht jedoch nicht den Try/Finally-Mustern, die in anderen Programmiersprachen wie Java, Python, Javascript oder C. zu finden sind. Wenn Sie das Try/Finally-Muster aus einer dieser Sprachen gelernt haben, achten Sie darauf. Wenn der Finally-Block aufgerufen wird, wird der Fehler übergeben, der abgefangen wurde. Wenn kein Fehler abgefangen wurde, wird nichts übergeben.

(Beachten Sie, dass der finally-Block mit dem Fehler nicht lokalisiert, da es im Gegensatz zu einem catch-Block keine Möglichkeit gibt zu wissen, ob `__ == undef impliziert, dass es keine Fehler gab.) Mit anderen Worten, der folgende Code tut genau das, was Sie erwarten würden: Das try-Schlüsselwort schiebt sich auf einen Fehlerstapel, wodurch einige der Probleme mit dem Code vermieden werden, aber Sie müssen immer noch lokalisieren, um Clobbering zu verhindern. Wir waren immer darauf bedacht, dass diese Änderungen nicht richtig in Java Edition implementiert werden, bis wir Dein Feedback erhalten haben – und jetzt haben genug von euch über den Glasstein geschrien, damit wir ein aktualisiertes Paket veröffentlichen können! Dies ist Version 2 und Sie können diese grüne Textzeile hier klicken, um sie jetzt herunterzuladen! Sie können eine oder mehrere Ressourcen in einer try-with-resources-Anweisung deklarieren. Im folgenden Beispiel werden die Namen der in der ZIP-Datei zipFileName verpackten Dateien abgerufen und eine Textdatei erstellt, die die Namen dieser Dateien enthält: Ausnahmeobjektimplementierung mit einer try-Anweisung. Lokalisiert nicht . Eine Ausnahme kann aus dem Codeblock ausgelöst werden, der der try-with-resources-Anweisung zugeordnet ist. Im Beispiel writeToFileZipFileContents kann eine Ausnahme aus dem try-Block ausgelöst werden, und bis zu zwei Ausnahmen können aus der try-with-resources-Anweisung ausgelöst werden, wenn versucht wird, die ZipFile- und BufferedWriter-Objekte zu schließen. Wenn eine Ausnahme aus dem try-Block ausgelöst wird und eine oder mehrere Ausnahmen aus der try-with-resources-Anweisung ausgelöst werden, werden die Ausnahmen, die aus der try-with-resources-Anweisung ausgelöst werden, unterdrückt, und die vom Block ausgelöste Ausnahme ist diejenige, die von der writeToFileZipFileContents-Methode ausgelöst wird. Sie können diese unterdrückten Ausnahmen abrufen, indem Sie die Throwable.getSuppressed-Methode aus der Vom try-Block ausgelösten Ausnahme aufrufen.

Es wurde entwickelt, um so korrekt wie möglich im Lichte der verschiedenen pathologischen Randfälle zu arbeiten (siehe „HINTERGRUND“) und mit jedem Stil von Fehlerwerten (einfache Zeichenfolgen, Referenzen, Objekte, überladene Objekte usw.) kompatibel zu sein.