Как создать собственное исключение, которое оборачивает исключения Mutliple в Java - PullRequest
0 голосов
/ 24 августа 2018

Как создать пользовательское исключение, которое включает три разных исключения, например InvalidContextException, IllegalArgumentException. Например, скажем, есть метод:

public void method() throws IOException, IllegalArgumentException, 
InstantiationException, IllegalAccessException {
      //Body of the method
}

Я хочу минимизировать количество исключений после ключевого слова throws, создав пользовательское исключение, которое обрабатывает InstantiationException и IllegalAccessException и IllegalArgumentException вместе, как указано ниже:

 public void method() throws IOException, CustomException {
       //Body of the method
 }

Ответы [ 3 ]

0 голосов
/ 24 августа 2018

Объявите класс CustomException, который объявляет только конструкторы с этими конкретными классами.
Таким образом, он может только обернуть эти исключения, а не любые другие.

public class CustomException extends RuntimeException{

    public CustomException(IllegalArgumentException e) {
        super(e);
    }

    public CustomException(IllegalAccessException  e) {
        super(e);
    }

    public CustomException(InstantiationException e) {
        super(e);
    }

}
0 голосов
/ 24 августа 2018

Вы можете перехватить каждое выброшенное исключение и сбросить его в пользовательском исключении:

...
} catch (IllegalArgumentException | InstantiationException | IllegalAccessException ex) {
    throw new CustomException(ex);
}

Конструктор CustomException примет любое исключение в качестве аргумента и переформулирует или получит свое сообщение. Конечно, CustomException должно быть расширено Exception, чтобы его можно было бросать.

0 голосов
/ 24 августа 2018

В духе вопроса, как задано:

Вам нужно будет отловить различные исключения в вашем методе, а затем выбросить CustomException из вашего блока catch. Возможность исключения «обтекания» вокруг другого исключения встроена в сам класс Exception (см. Конструктор Exception(Throwable cause)).

public void method() throws IOException, CustomException {
    try {
        //Body of the method
    } catch (IllegalArgumentException | InstantiationException | IllegalAccessException e) {
        throw new CustomException(e);
    }
}

Тем не менее, IllegalArgumentException не является проверенным исключением, так что вам все равно не придется его объявлять.

Также стоит отметить, что вышеизложенное основано на том, что вы указали, что хотите создать собственное исключение. Другой вариант - объявить в вашем предложении throws некоторый тип, который является общим базовым классом различных проверенных исключений, которые могут фактически быть выброшены. Например, оба отмеченных исключения в вашем списке являются подклассами ReflectiveOperationException, так что вы можете просто сказать

public void method() throws IOException, ReflectiveOperationException {
    //Body of the method
}

Конечно, компромисс заключается в том, что вы не настолько информативны, как те, кто пишет код, вызывающий ваш метод, что может ограничить качество их обработчиков исключений. В крайнем случае, вы могли бы просто сказать throws Thorwable, но это довольно плохая форма.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...