if
在您看来,语句或Try/Catch
块哪种方式更适合异常处理?
因为,如您所知,所有异常都可以用if
语句处理。
这取决于实际情况。我会尽力解释。
考虑这个简单的例子:
try {
myVar.myFunc();
}
catch(NullPointerException e) {
//bla bla
}
或者
if (myVar != null)
myVar.myFunc();
如果myVar
可以null
作为您的代码流的一部分,那么您可以使用if
语句,否则您应该使用异常,因为它可能是由于您无法控制的事情引起的。
好吧,据我了解,您对 if/else 语句的意思是,函数的返回值将是 SUCCESS 或 FAILURE,并且所有实际工作都将在函数的参数上完成。
这是一种 C 风格的编码 - 没有例外。
在java中,因为你不能通过引用(或指针)传递元素,所以这种方法是有问题的(你必须为返回一个int
非常不优雅的方法创建一个包装器),甚至在C中——它更多的是必需品然后是优雅的东西。
示例 - C 风格的代码可以执行以下操作:
int calcSomething(int arg1, int arg2, int* result) {
//calcualtions
if (...) return FAILURE;
*result = ...
return SUCCESS;
}
编码环境将是:
if (calcSomething(...) == FAILURE) { handleError(); }
注意 - 该方法在 java 中并没有完全消失,例如Collection#add()
返回一个boolean
指示操作是否成功的方法。它主要用于false
值不是真正错误的操作 - 更多的是表明无事可做。
每当“错误”被阻塞时——使用异常处理错误——它们的可读性更高,代码的可维护性更好。如果它只是一个指示(对于 eaxmple - 元素已经在集合中) - 返回值中的布尔值就可以了。