Передача исключения в пользовательский метод обработчика исключений. Java - PullRequest
0 голосов
/ 17 марта 2020

У меня есть класс с примерно 20 методами, которые все перехватывают 1 или более исключений, а затем отвечают пользователю на основе этого исключения. Вместо того, чтобы писать их снова и снова, я хочу создать единственный метод, который передает исключение, обрабатывает его и дает соответствующий ответ.

Вот пример

public boolean addFirst(Object data){

    try {
        //add something 
        return true;
    } catch(Exception e) {
        exceptionHandler(e);
        return false;
    } 
}

Но когда я пытаюсь сравнить его с «е», это дает мне « Исключение невозможно преобразовать в переменную».

private void exceptionHandler(Exception e) {
    if(e == UnsupportedOperationException) {
        System.out.println("Operation is not supported.");
    } else if (e == ClassCastException) {
        System.out.println("Class of the specified element prevents it from being added to this list.");
    } else if (e == NullPointerException) {
        System.out.println("You cannot enter nothing.");
    } else if (e == IndexOutOfBoundsException) {
        System.out.println("Your specified index is larger than the size of the LinkedList. Please choose a lower value.");
    } else if(e == Exception) {
        System.out.println("You messed up so hard that I don't even know what you did wrong."); 
    }
}

Ответы [ 2 ]

1 голос
/ 17 марта 2020

Например, UnsupportedOperationException не является объявленной переменной, на это жалуется компилятор.

При выполнении e == UnsupportedOperationException вы проверяете, равна ли ссылка e ссылке на UnsupportedOperationException но UnsupportedOperationException никогда не был объявлен.

Чтобы проверить тип объекта, вы должны использовать ключевое слово instanceof и class, с которым хотите проверить.

e instanceof UnsupportedOperationException
1 голос
/ 17 марта 2020

Вы хотите использовать instanceof вместо ==, потому что вы пытаетесь сравнить два разных типа.

if(e instanceof UnsupportedOperationException)

et c

...