正如上面所有人提到的那样--
据我理解,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) {
ExceptionGenerator eg = new ExceptionGenerator();
try {
eg.generateException();
} catch (MyLocalizedThrowable e) {
System.out.println(e.getLocalizedMessage());
}
}
默认情况下,如果您在“英语”环境中执行,则会返回“英语”键值。如果您将本地设置为法国,则将从message_fr文件获取输出。
何时使用它
如果您的应用程序需要支持l10n/i18n,则需要使用它。但大多数应用程序不需要,因为大多数错误消息不是面向最终客户,而是面向支持工程师/开发工程师。