我正在开发一个用于处理文件的库,并希望使其易于使用(即不必担心异常),但也尽可能完整(即允许适当的异常处理)。
为了实现这一点,我公开了两种方法。一种允许正常捕获异常的方法:
public void saveChecked() throws IOException, IllegalArgumentException {
// Possibly throw an IOException or IllegalArgumentException
}
...以及一个使用泛型处理所有异常的方法Consumer<Exception>
:
public void save(Consumer<Exception> handler) {
try {
saveChecked();
} catch (Exception exception) {
handler.accept(exception);
}
}
这背后的意图是,如果您不需要区分异常并且只想在抛出异常时做一件简单的事情(例如打印堆栈跟踪,显示弹出窗口),您可以只使用第二个版本而不必写出一个 try-catch 块(并使单行不可能)。
即使 API 确实公开了一个允许对需要它的人进行适当异常处理的方法,这仍然是不好的做法吗?