假设我们有一个简单的解析器:
public class ResourceManager {
private final static Logger LOG = Logger.getLogger(ResourceManager.class);
public Museum parseJSONFile(String filePath) /*throws IOException ???? */ {
Museum museum = null;
try {
ObjectMapper objectMapper = new ObjectMapper();
museum = objectMapper.readValue(new File(filePath), Museum.class);
} catch(IOException e) {
LOG.error(e);
}
return museum;
}
}
是否应该在方法或调用代码中捕获异常?哪种变体更好?
答案 0 :(得分:8)
Parser无法对异常做任何事情,因此对于解析器来说这是一种特殊情况,它无法产生任何可预期的结果。外面的人应该处理它。
特别是,它不应该返回null
,因为它会导致调用代码中的大量空值检查(您很容易忘记放置,或者由于缺少有关您的实现的文档,我只是#39;知道我是否必须在没有看到代码的情况下检查null
。这是Java中的异常旨在解决的问题之一。通过在方法签名中声明检查异常,您可以强制解析器的用户处理可能不会出现值的事实。