Java 异常的 getMessage
和 getLocalizedMessage
方法有什么区别?
我正在使用这两种方法来获取 catch 块在执行错误处理时抛出的消息。他们都从错误处理中得到消息,但这两者究竟有何不同?
我在 Internet 上进行了一些搜索,并在 Answers.com 上找到了这个答案:
Java Exceptions 从 Throwable 继承它们的 getMessage 和 getLocalizedMessage 方法(参见相关链接)。不同之处在于子类应该覆盖 getLocalizedMessage 以提供特定于语言环境的消息。
例如,假设您正在将美国英语公司/集团的代码改编为英国英语集团。您可能想要创建自定义异常类,它会覆盖 getLocalizedMessage 以更正拼写和语法,以符合将使用您的代码的用户和开发人员可能期望的内容。这也可以用于异常消息的实际翻译。
问题:
这是否意味着 特定于语言的 实现?就像我使用
e.getLocalizedMessage()
例如我的 英语 应用程序 - 错误将被抛出English
如果我使用我的应用程序 西班牙语- 那么错误将被抛出 西班牙语?需要一些关于我可以在何时何地使用这些方法的明确解释/
原文由 Devrath 发布,翻译遵循 CC BY-SA 4.0 许可协议
就像上面大家提到的——
据我了解,
getMessage()
返回异常的名称。getLocalizedMessage()
以用户本地语言(中文、日文等)返回异常名称。为了使这项工作,您调用的类getLocalizedMessage()
必须覆盖getLocalizedMessage()
方法。如果没有,则调用其中一个超类的方法,默认情况下只返回 getMessage 的结果。除此之外,我想放一些代码段来解释如何使用它。
如何使用它
Java 没有做任何神奇的事情,但它确实提供了一种让我们的生活更轻松的方法。要有效地使用
getLocalizedMessage()
,我们必须覆盖默认行为。java.util.ResourceBundle
用于本地化。在此示例中,您必须将特定于语言的属性文件放在
loc/exc/test
路径中。例如:message_fr.properties(包含一些键和值):
message.properties(包含一些键和值):
现在,让我们假设我们的异常生成器类类似于
主要课程是:
默认情况下,如果您在“英语”环境中执行,它将返回“英语”键值。如果将本地设置为法国,您将从 message_fr 文件中获得输出。
何时使用
如果您的应用程序需要支持 l10n/i18n,您需要使用它。但大多数应用程序不需要,因为大多数错误消息不是给最终客户的,而是给支持工程师/开发工程师的。