考虑一些可以引发检查异常的代码(类型为
Exception
的例外).当然,您的代码会捕获异常.你不仅仅是吞下这个例外,你的代码也会以某种方式通过用户界面向用户报告.在日志文件中,或者使用GUI弹出窗口.
您向用户报告的文本是否包含异常的消息文本.那是Throwable.getMessage()
还是Throwable.getLocalizedMessage()
提供的文字?
我认为不是,但似乎很多人不同意我的看法.那么我有什么错误?我的论点如下.
>在抛出异常时创建消息.因此,它最多只能提供非常低级别的信息,这可能不适合向用户报告.
>哲学上,使用这个消息似乎反对整个例外,即将错误处理(抛出部分)的检测和启动从完成处理和报告(捕获部分)分离出来.使用该消息意味着该消息必须有助于报告,这将报告的责任转移到仅负责检测和启动的位置.也就是说,我认为Throwable设计的getMessage()部分是一个错误.
>邮件未本地化.尽管它的名字,getLocalizedMessage()不是很好,因为你可能不知道你想要使用什么语言环境,直到你捕获异常(报告要去系统日志读取你的英文系统管理员,还是弹出在法国用户的窗口中?).
>我听说Java 7对于IOException有非常大的改进的异常层次结构,使您能够处理不同的catch子句中的不同类型的I / O错误,使得getMessage()文本更不重要.这意味着即使Java设计人员对getMessage()有些不舒服.
我不是问报告栈跟踪是否有用.堆栈跟踪仅对建议错误的异常有用.也就是说,对于未经检查的异常.我认为在这种情况下,提供异常消息的低级细节不仅仅是有用的,而且是强制性的.但是我的问题涉及检查的异常,例如文件未找到.