我想编写一个文件日志,其中包含从 xml 文件读取的方法的错误。这个方法太大了,我想控制导致错误的行内容。现在我有一个变量,其中包含我要读取的字段,如果该字段失败,该方法将返回带有该字段名称的错误。这是一个糟糕的解决方案,我需要类似但更动态的解决方案。
String error;
...
error= name;
String name = getValue("name");
error= surname;
String surname = getValue("surname");
......
catch(Exception){
return error;
}
最佳答案
是的,这是一个糟糕的主意。
在读取属性之前,您将“name”
保存到error
变量中。您不知道是否会读取该属性,但无论读取如何,变量都已设置。如果每个属性都已成功解析(这正是我们所希望的),您仍然会将错误变量设置为某个属性名称。
在这种情况下,我们通常会将这些信息放入异常实例中。当我们处于 catch block 时,我们能够访问该信息并采取相应的行动。
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或重新抛出不同的层确定的异常。
关于java - 在 Java 异常中返回导致该异常的行的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56751263/