避免引发新的异常

时间:2020-03-06 14:55:06  来源:igfitidea点击:

我有一个if条件,用于检查值,它会引发新的NumberFormatException

还有其他编码方式吗

if (foo)
{
    throw new NumberFormatException
}

// ..

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

解决方案

如果目的是避免引发新的异常:

if(foo)
{
  //some msg...
} else
{
  //do something else
}

在Java中,我们可以先尝试使用正则表达式解析字符串,然后再尝试将其转换为数字。

如果我们尝试捕获自己的异常(为什么?),则可以执行以下操作:

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

如果我们正在执行以下操作:

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

然后,可以肯定的是,我们可以完全避免该异常,并在条件块内执行"执行操作"部分。

如果尝试用其他错误处理机制替换引发异常,则唯一的选择是返回或者设置错误代码,问题是我们必须去确保已在其他地方检查了该错误。

例外是最好的。

如果可以以其他更优雅的方式处理异常,请不要抛出异常。异常的代价很高,仅应用于无法控制的情况(例如,数据库服务器没有响应)。

如果要确保设置了值并正确设置了格式,则应尝试以更合理的方式处理这些条件的失败。例如...

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?
}

如果我们知道将导致我们引发NumberFormatException的流程,请使用代码来处理这种情况。我们不应将"异常"层次结构用作程序流机制。