Nie jestem pewien, czy to zrobię (chociaż biorąc pod uwagę JavaDoc, nie mogę powiedzieć, dlaczego się waham), ale istnieje lista wyłączonych wyjątków Throwable
, do których można dodać za pośrednictwem addSuppressed
. Wydaje się, że JavaDoc nie mówi, że jest to przeznaczone wyłącznie dla JVM w try-with-resources:
Dołącza określony wyjątek do wyjątków, które zostały pominięte w celu dostarczenia tego wyjątku. Ta metoda jest bezpieczna dla wątków i zwykle wywoływana (automatycznie i niejawnie) przez instrukcję try-with-resources.
Wyłączenie jest włączone, chyba że zostanie wyłączone za pomocą konstruktora. Gdy wyłączenie jest wyłączone, ta metoda nie robi nic poza sprawdzeniem poprawności swojego argumentu.
Zauważ, że gdy jeden wyjątek powoduje inny wyjątek, pierwszy wyjątek jest zwykle wychwytywany, a następnie drugi wyjątek jest zgłaszany w odpowiedzi. Innymi słowy, istnieje związek przyczynowy między tymi dwoma wyjątkami. Przeciwnie, istnieją sytuacje, w których dwa niezależne wyjątki mogą być zgłaszane w blokach kodu rodzeństwa, w szczególności w bloku try instrukcji try-with-resources i generowanym przez kompilator bloku ostatecznie, który zamyka zasób. W takich sytuacjach można propagować tylko jeden z zgłoszonych wyjątków. W instrukcji try-with-resources, gdy istnieją dwa takie wyjątki, propagowany jest wyjątek pochodzący z bloku try, a wyjątek z bloku ostatecznie jest dodawany do listy wyjątków pomijanych przez wyjątek z bloku try. Jako wyjątek rozwija stos,
Wyjątek mógł zostać pominięty, a jednocześnie spowodowany przez inny wyjątek. To, czy wyjątek ma przyczynę, jest semantycznie znane w momencie jego utworzenia, w przeciwieństwie do tego, czy wyjątek będzie tłumił inne wyjątki, które zwykle określa się dopiero po zgłoszeniu wyjątku.
Zauważ, że kod napisany przez programistę może również skorzystać z wywołania tej metody w sytuacjach, w których istnieje wiele wyjątków od rodzeństwa i można propagować tylko jeden.
Zwróć uwagę na ostatni akapit, który wydaje się pasować do twojego przypadku.
AggregateException
który zawiera listę wyjątków. Ten pomysł powinien dotyczyć także Javy.