递归函数抛出异常
Throwing exception from recursive function
我为一个更大的应用程序构建了一个 library/module,它从函数中抛出异常。如果找不到文件或文件包含错误格式,则会抛出异常。
该方法类似于:
Shape parse(String path) throws Exception {
// load file, parse file, guild graph
if ( file does contain bad format ) {
throw new Exception("bad format");
}
parse(newPath);
}
异常将终止我的模块,因为它会在使用我的模块的应用程序中被捕获,但这没关系,因为格式不正确。
我想知道的是 - 像这样从递归函数中抛出异常是一种不好的做法吗?
这真的取决于你的编程风格。
在递归函数中抛出异常还不错,但是抛出
new Exception("bad format")
不是一个很好的做法,因为很难捕捉到特定的异常。您应该改为创建自己的例外或使用
java.text.ParseException
作为检查异常。
另一方面,您也可以 return 一个 Either 类型来避免检查异常。在 Java 中有关于实现它的现有答案:
Is there an equivalent of Scala's Either in Java 8?
我为一个更大的应用程序构建了一个 library/module,它从函数中抛出异常。如果找不到文件或文件包含错误格式,则会抛出异常。
该方法类似于:
Shape parse(String path) throws Exception {
// load file, parse file, guild graph
if ( file does contain bad format ) {
throw new Exception("bad format");
}
parse(newPath);
}
异常将终止我的模块,因为它会在使用我的模块的应用程序中被捕获,但这没关系,因为格式不正确。
我想知道的是 - 像这样从递归函数中抛出异常是一种不好的做法吗?
这真的取决于你的编程风格。
在递归函数中抛出异常还不错,但是抛出
new Exception("bad format")
不是一个很好的做法,因为很难捕捉到特定的异常。您应该改为创建自己的例外或使用
java.text.ParseException
作为检查异常。
另一方面,您也可以 return 一个 Either 类型来避免检查异常。在 Java 中有关于实现它的现有答案: Is there an equivalent of Scala's Either in Java 8?