在Java异常中返回导致它的行的内容

时间:2019-06-25 09:52:20

标签: java spring exception error-handling

我想编写一个文件日志,其中包含从xml文件读取的方法的错误。此方法太大,我想控制导致错误的行内容。现在,我有了一个变量,该变量具有要读取的字段,如果该字段失败,则该方法将使用该字段的名称返回错误。这是一个糟糕的解决方案,我需要类似但更动态的东西。

String error;
...
error= name;
String name = getValue("name");
error= surname;
String surname = getValue("surname");

......

catch(Exception){
return error;
}

2 个答案:

答案 0 :(得分:1)

是的,这是一个糟糕的主意。

在读取属性之前,请将"name"保存到error变量中。您不知道是否将读取该属性,但是无论读取如何都已设置了变量。如果每个属性都已成功解析(这是我们希望的),那么您仍然会将error变量设置为某些属性名称。

在这种情况下,我们通常将此信息放入异常实例中。当我们陷入困境时,我们能够访问该信息并采取相应措施。

public String getValue(String propertyName) {
    try {
        tryToReadProperty(propertyName);
    } catch (Exception e) {
        // something wrong happened
        throw new IllegalArgumentException(propertyName);
    }
}

...

try {
    String name = getValue("name");
    String surname = getValue("surname");
} catch (IllegalArgumentException e){
    String error = e.getMessage();
}

为简单起见,我使用了IllegalArgumentException,应将其替换为更有意义的特定于域的异常类型。

return error;

我们很少这样做。相反,我们propagate an exception或重新抛出不同的由图层确定的异常。

答案 1 :(得分:0)

请参阅Martin Fowler的Notification pattern