java - 错误处理中的递归?

标签 java exception recursion

我正在编写一个返回对象的文件读取器,我希望它能够警告解析错误并继续处理下一条记录。

下面的代码是此代码的明显实现,但涉及从 catch block 内部递归。有什么技术或风格上的理由不这样做吗?

public RecordType nextRecord() throws IOException{
    if (reader == null){
        throw new IllegalStateException("Reader closed.");
    }
    String line = reader.readLine();
    if (line == null){
        return null;
    }else{
        try {
            return parseRecord(line);
        }catch (ParseException pex){
            logger.warn("Record ignored due to parse error: " 
                + pex.getMessage());
            //Note the recursion here
            return nextRecord();
        }
    }
}

最佳答案

我更喜欢使用循环。通过递归,您永远不知道可以安全地走多深。

String line;
while((line = reader.readLine()) != null) {
    try {
        return parseRecord(line);
    }catch (ParseException pex){
        logger.warn("Record ignored due to parse error: " + pex);
    }
}
return null;

关于java - 错误处理中的递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5911557/

相关文章:

javascript - 递归函数 vs setInterval vs setTimeout javascript

python - 查找图中从 A 到 N 的所有路径

java - 使用递归求和

java - 为什么 getExternalStorageDirectory 返回我手机的根存储,而不是 SD 卡?

java - 即使输入新值后,文本框的值属性仍保留旧值

java - 使用 JDBC 与 MySQL、JAVA REST 和 Python REST 进行序列化

java - Spring数据存储库不工作

c++ - C++ 中的异常处理从不捕获基本类型的异常,总是导致段错误

iphone - 防止应用程序崩溃

C# 溢出不起作用?如何启用溢出检查?