考虑一些可能引发检查异常(类型为的异常Exception)的代码。catch当然,您的代码是例外。您也不只是吞下该异常,您的代码还可以通过您的用户界面以某种方式向用户报告该异常。也许在日志文件中,或使用GUI弹出窗口。
您报告给用户的文本应包含异常的消息文本。也就是说,由Throwable.getMessage()或提供的文本Throwable.getLocalizedMessage()?
我认为不是,但是似乎很多人不同意我的看法。那我怎么了?我的论据如下。
该消息是在引发异常时创建的。因此,它充其量只能提供非常低级的信息,可能不适合向用户报告。
从哲学上讲,在我看来,使用消息与异常的整体观点相抵触,即将错误处理的检测和启动(throw部分)与处理和报告的完成(部分)分开catch。使用该消息意味着该消息必须能够很好地进行报告,从而将报告的责任转移到仅应负责检测和启动的位置。也就是说,我认为getMessage()设计的一部分Throwable是错误的。
该消息未本地化。尽管它的名字getLocalizedMessage()很好,但不是很好,因为您可能要等到您catch例外时才知道要使用什么语言环境(是要转到英语系统管理员阅读的系统日志的报告,还是要在窗口中弹出以查看GUI的法语用户?)。
我听说Java 7为改进了异常层次结构IOException,使您能够处理不同catch子句中的各种I / O错误,从而使getMessage()文本的重要性降低。这意味着即使Java设计人员也对它不满意getMessage()。
我不是问报告堆栈跟踪是否有用。堆栈跟踪只会对提示错误的异常有用。也就是说,对于未经检查的异常。我认为在这种情况下,提供异常消息的低级详细信息不仅有用,而且是强制性的。但是我的问题涉及已检查的异常,例如文件未找到。
慕莱坞森
米脂
江户川乱折腾
相关分类