就像上面每个人都提到的
据我了解,
getMessage()返回异常的名称。
getLocalizedMessage()以用户的本地语言(中文,日语等)返回异常的名称。为了使此工作正常,您正在调用的类
getLocalizedMessage()必须已重写该
getLocalizedMessage()方法。如果没有,则调用其中一个超类的方法,默认情况下,该方法仅返回getMessage的结果。
除此之外,我想放置一些代码段来解释如何使用它。
如何使用它
Java并没有提供任何神奇的功能,但是它确实提供了一种使我们的生活更轻松的方法。为了
getLocalizedMessage()有效使用,我们必须覆盖默认行为。
import java.util.ResourceBundle;public class MyLocalizedThrowable extends Throwable { ResourceBundle labels = ResourceBundle.getBundle("loc.exc.test.message"); private static final long serialVersionUID = 1L; public MyLocalizedThrowable(String messageKey) { super(messageKey); } public String getLocalizedMessage() { return labels.getString(getMessage()); }}java.util.ResourceBundle
用于进行本地化。
在此示例中,您必须在
loc/exc/test路径中放置特定于语言的属性文件。例如:
message_fr.properties(包含一些键和值):
key1=this is key one in France
message.properties(包含一些键和值):
key1=this is key one in English
现在,让我们假设我们的异常生成器类类似于
public class ExceptionGenerator { public void generateException() throws MyLocalizedThrowable { throw new MyLocalizedThrowable("key1"); }}主要类别是:
public static void main(String[] args) { //Locale.setDefault(Locale.FRANCE); ExceptionGenerator eg = new ExceptionGenerator(); try { eg.generateException(); } catch (MyLocalizedThrowable e) { System.out.println(e.getLocalizedMessage()); }}默认情况下,如果您在“英语”环境中执行,它将返回“英语”键值。如果将本地设置为法国,则将从message_fr文件获取输出。
什么时候使用
如果您的应用程序需要支持l10n /
i18n,则需要使用它。但是大多数应用程序并不需要,因为大多数错误消息不是针对最终客户的,而是针对支持工程师/开发工程师的。



