Java исключение: выбросить назад или отправить как возврат (вывод функции)? - PullRequest
2 голосов
/ 26 августа 2011

Вот пример использования: я пишу классы и функции, предназначенные для выполнения определенной функции / задачи (например, createBuilding, destroyBuilding и т. Д.).Конструкция, которой я придерживаюсь, заключается в том, что функция не обрабатывает и не обрабатывает ошибки.Вызывающая сторона несет ответственность за принятие соответствующих мер в случае возникновения ошибки / исключения.Я могу сделать это двумя способами:

public void caller {
  try {
      A.createBuilding();
  catch (Exception e) {
      process exception
  }
}

Первый подход:

public class A {
   public String createBuilding throws Exception {
     try {
        blah blah blah
     catch (Exception e) {
        throw new Exception(e);
     }
}

Второй подход:

public class A {
   public String createBuilding {
     StringBuffer sb = new StringBuffer();
     try {
        blah blah blah
     catch (Exception e) {
        sb.add(e.toString());
     }
     return sb.toString();
}

The user in the second case does the following:
public void caller throws Exception {
      String st = A.createBuilding();
      if (st.contains("Exception"))
        do something;
}

Предположим, что вызываемая функция всегда возвращает строку.

Есть какие-нибудь комментарии о том, какой подход лучше?Какие-нибудь подводные камни / проблемы, которые я пропускаю?

Цените всю помощь !!!

Ответы [ 3 ]

8 голосов
/ 26 августа 2011

Используйте первый курс, т. Е. Используйте исключения.

Второй нарушает годы исследований по обработке ошибок, не делайте этого.

Причина : Если выИспользуя исключения, вы сможете использовать всю структуру обработки ошибок в сборке java вокруг исключений, таких как Thread.uncaughtExceptionHandler, трассировки стека и т. д. Кроме того, использование исключений является предпочтительным способом обработки ошибок и будет рекомендовано при возврате пользовательских строк для выявления ошибок.

1 голос
/ 26 августа 2011

Возвращение строки удаляет информацию (например, трассировку стека.) Если ваш метод не обрабатывает исключение, он не должен перехватывать его и позволять вызывающей стороне обрабатывать его:

   public void createBuilding() throws Exception {

        blahBlahBlah();
   }
0 голосов
/ 26 августа 2011

Единственный недостаток в использовании Исключений состоит в том, что они немного медленнее, в противном случае они дают только преимущества (отслеживание стека, возможность использования специализированных обработчиков, простые в использовании состояния, встроенные и т. Д.).Если влияние на производительность сдерживает вас при их использовании, вам, вероятно, следует переключиться на ASM или C, и если вы это сделаете, не забудьте вернуть 0 в случае успеха и что-либо еще в случае сбоя, чтобы у вас было достаточно кодов, чтобы их было достаточноошибки;)

Не совсем, продолжайте и используйте исключения всеми средствами.За исключением случаев, когда вы можете придумать причину, по которой многие другие люди также могут считать ее действительной (не только себя).

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