Метод addSuppressed
Метод addSuppressed добавляет указанное исключение
в список подавленных исключений (suppressed exceptions)
текущего объекта Throwable. В первый параметр
мы передаем исключение, которое необходимо подавить.
Этот метод часто используется в блоке finally
или в конструкции try-with-resources, чтобы сохранить
информацию об ошибке, возникшей при закрытии ресурса,
не перекрывая основное исключение.
Подавленные исключения доступны через метод
getSuppressed, который возвращает массив
типа Throwable[].
Синтаксис
throwable.addSuppressed(exception)
Пример
Давайте создадим основное исключение и добавим к нему подавленное исключение, а затем выведем информацию о них:
public class Main
{
public static void main(String[] args)
{
Exception mainEx = new Exception("Main error");
Exception suppressedEx = new Exception("Suppressed error");
mainEx.addSuppressed(suppressedEx);
System.out.println("Main: " + mainEx.getMessage());
for (Throwable t : mainEx.getSuppressed())
{
System.out.println("Suppressed: " + t.getMessage());
}
}
}
Результат выполнения кода:
"Main: Main error"
"Suppressed: Suppressed error"
Пример
Давайте рассмотрим практический пример
с использованием try-with-resources, где
метод addSuppressed автоматически
вызывается при закрытии ресурса:
public class Main
{
static class Resource implements AutoCloseable
{
public void close() throws Exception
{
throw new Exception("Error closing resource");
}
}
public static void main(String[] args)
{
try (Resource res = new Resource())
{
throw new Exception("Main error");
}
catch (Exception e)
{
System.out.println("Caught: " + e.getMessage());
for (Throwable t : e.getSuppressed())
{
System.out.println("Suppressed: " + t.getMessage());
}
}
}
}
Результат выполнения кода:
"Caught: Main error"
"Suppressed: Error closing resource"
Смотрите также
-
класс
Throwable,
который является базовым для всех ошибок -
метод
getCause,
который возвращает причину исключения -
метод
printStackTrace,
который выводит стек вызовов исключения -
конструкция
try-with-resources,
которая автоматически управляет ресурсами