Избегайте создания нового исключения - PullRequest
0 голосов
/ 30 сентября 2008

У меня есть условие if , которое проверяет значение и выдает новое NumberFormatException

Есть ли другой способ кодировать это

if (foo)
{
    throw new NumberFormatException
}

// ..

catch (NumberFormatException exc)
{
    // some msg...
}

Ответы [ 6 ]

4 голосов
/ 30 сентября 2008

Если вы делаете что-то вроде этого:

try
{
   // some stuff
   if (foo)
   {
      throw new NumberFormatException();
   }
}
catch (NumberFormatException exc)
{
   do something;
}

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

2 голосов
/ 30 сентября 2008

Если ваша цель состоит в том, чтобы избежать создания нового исключения:

if(foo)
{
  //some msg...
} else
{
  //do something else
}
1 голос
/ 30 сентября 2008

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

Если вы пытаетесь убедиться, что значение установлено и отформатировано правильно, вы должны попытаться обработать сбой этих условий более изящным способом. Например ...

if(myObject.value != null && Checkformat(myObject.Value)
{
    // good to go
}
else
{
    // not a good place to be.  Prompt the user rather than raise an exception?
}
0 голосов
/ 30 сентября 2008

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

0 голосов
/ 30 сентября 2008

Если вы пытаетесь заменить выдачу исключения каким-либо другим механизмом обработки ошибок, ваш единственный вариант - вернуть или установить код ошибки - проблема заключается в том, что вам нужно пойти и убедиться, что он проверен в другом месте.

исключение лучше.

0 голосов
/ 30 сентября 2008

В Java вы можете попробовать разобрать строку с регулярными выражениями, прежде чем пытаться преобразовать ее в число.

Если вы пытаетесь поймать свое собственное исключение (почему ???), вы можете сделать это:

try { if (foo) throw new NumberFormatException(); }
catch(NumberFormatexception) {/* ... */}
...