我想编写一个文件日志,其中包含从xml文件读取的方法的错误。此方法太大,我想控制导致错误的行内容。现在,我有了一个变量,该变量具有要读取的字段,如果该字段失败,则该方法将使用该字段的名称返回错误。这是一个糟糕的解决方案,我需要类似但更动态的东西。
String error;
...
error= name;
String name = getValue("name");
error= surname;
String surname = getValue("surname");
......
catch(Exception){
return error;
}
答案 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。