免责声明:我来自 C# 世界,所以这个问题可能因我之前的经验而有偏差
我有一个初始化日志记录的方法。如果失败,应用程序的其余部分不应运行,因为对记录器的任何调用都会抛出 NullPointerException。
今天,我的代码捕获异常并通过 System.err 打印错误日志。对我来说,这是一个错误,它应该让异常传播直到它杀死应用程序。
因此,我开始删除 try catch,突然收到编译器的抱怨,说我应该在调用此方法的整个堆栈上声明我的异常。
我理解它背后的逻辑,并且发现它很实用:你知道这种方法是如何失败的。
然而,就责任分离而言,这对我来说听起来并不正确。我不希望上层意识到这种潜在的 IOException 失败,这是一种非常特殊的行为,例如 main 方法不应该知道。而且,如果我们推动这个逻辑,那就意味着:
最高层最终必须声明异常的整个范围(从 IO 到网络再到自定义异常......)
任何新异常的添加都可能会影响大量文件和代码
我是否遗漏了什么或者这是预期的异常设计?
幕布斯7119047
ibeautiful
米脂
相关分类