Java: пользовательский класс исключений с несколькими исключениями - PullRequest
0 голосов
/ 09 января 2020

Я привык к программированию в C++, где вы объявляли бы несколько пользовательских исключений, например, в одном классе: c ++ Exceptions , и вы вызывали бы эти пользовательские исключения с помощью throw new ExceptionEnumerationBeyondEnd() .

Как бы я сделал это в Java?

Из того, что я узнал в Java, нужно определить каждое исключение в своем собственном индивидуальном классе. В любом случае, я могу иметь класс исключений, который содержит несколько пользовательских исключений, как в c++, и просто вызывать команду throw, когда они нарушаются?

Я планирую использовать его в блоке try catch,

     try {

        if(...) throw new customException1();
        else ...

     } catch (customException1) {

     } catch (customException2) {

     } ...

1 Ответ

1 голос
/ 09 января 2020

Я попытаюсь привести несколько примеров в Java, поскольку я не уверен в этом на рисунке и в вашем утверждении:

, где вы бы объявили несколько пользовательских исключений, например, в одном классе:

Что именно вы подразумеваете под объявлением нескольких пользовательских исключений в одном классе.

Интерфейс

В Java вы можете либо определить Interface и реализовать его, и использовать его при наборе текста следующим образом:

interface CustomException {
   String getMessage();
}

Затем создайте класс, который реализует это.

class ApplicationException implements CustomException {
  public String getMessage() {
    return "Uh oh..";
  }
}

А когда вы бросаете что-либо, вы можете получить только ловлю CustomException.

try {
   // do something
}
catch( CustomException ce) {
  // do something with the CustomException
}

Базовый класс

Другим способом вы можете go это расширение одного из встроенных классов Exception, таких как RuntimeException или просто Exception.

class CustomException extends Exception {
  public CustomException(String message) {
    super(message);
  }
}

Затем вы можете расширять этот пользовательский класс и использовать его при обычном наборе текста.

class ApplicationException extends CustomException {
  public ApplicationException(String message) {
    super(message);
  }
}

Тогда это снова работает, как раньше:

try {
   // do something
}
catch( CustomException ce) {
  // do something with the CustomException
}

Внутри улова вы ловите их всех в одном go. Если вам нужно сделать разные логи c на разных уловах, вы можете сделать отдельные блоки catch, в противном случае вы можете сделать следующее:

try {
 // do something
}
catch ( ApplicationException | IllegalArgumentException e) {
  // do something with an error that is either a ApplicationException or a IllegalArgumentException
}

Не традиционный

Это я выкладываю сюда ради полноты но это не принято. Вы можете создать один файл в вашем проекте с именем Exception.java. Внутри вы можете определить столько классов, сколько захотите, и можете ссылаться на них, импортируя их, но это не идиоматический c способ написания Java.

Так внутри Exception.java:

class CustomException extends Exception {
  public CustomException(String message) {
    super(message);
  }
}

class ApplicationException extends Exception {
  public ApplicationException(String message) {
    super(message);
  }
}

Надеюсь, это поможет вам и продолжит ваше путешествие.

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