异常机制很有价值,因为它是获取状态指示符和响应值的唯一方法。此外,状态指示器是标准化的。如果有错误,你会得到一个异常。这样您就不必自己考虑错误指示器。争议不在于异常,而在于检查的异常(例如,您必须捕获或声明的异常)。
就个人而言,我觉得您选择了异常非常有价值的示例之一。用户输入错误值是一个常见问题,通常您需要返回给用户以获取正确值。如果您询问用户,您通常不会恢复为默认值;这给用户的印象是他的输入很重要。
如果您不想处理异常,只需将其包装在 RuntimeException(或派生类)中,它将允许您忽略代码中的异常(并在发生时终止您的应用程序;有时也可以)。
关于如何处理 NumberFormat 异常的一些示例: 在 Web 应用程序配置数据中:
loadCertainProperty(String propVal) {
try
{
val = Integer.parseInt(userdata);
return val;
}
catch (NumberFormatException nfe)
{ // RuntimeException need not be declared
throw new RuntimeException("Property certainProperty in your configuration is expected to be " +
" an integer, but was '" + propVal + "'. Please correct your " +
"configuration and start again");
// After starting an enterprise application the sysadmin should always check availability
// and can now correct the property value
}
}
在 GUI 中:
public int askValue() {
// TODO add opt-out button; see Swing docs for standard dialog handling
boolean valueOk = false;
while(!valueOk) {
try {
String val = dialog("Please enter integer value for FOO");
val = Integer.parseInt(userdata);
return val;
} catch (NumberFormatException nfe) {
// Ignoring this; I don't care how many typo's the customer makes
}
}
}
在 Web 表单中:将表单返回给用户,并提供有用的错误消息和更正的机会。大多数框架都提供了一种标准化的验证方式。