• 我正在使用这两种方法来获取捕获到的消息
    执行错误处理时阻止
  • 他们俩都从错误处理中得到了我的消息,但是
    这两个与
  • 到底有什么不同
  • 我从互联网上进行了一些搜索,并从中得到了这个答案
    here




  • 问题::
  • 这是否意味着language specific实现?就像我将e.getLocalizedMessage()用于
    例如我的应用程序在English中-如果我将在English中引发错误
    Spanish中使用我的应用程序-则Spanish会引发错误
  • 需要在何时何地使用这些方法的一些清晰解释
    我用
  • 最佳答案

    就像上面每个人都提到的

    据我了解,getMessage()返回异常的名称。 getLocalizedMessage()以用户的本地语言(中文,日语等)返回异常的名称。为了使此工作有效,您正在调用getLocalizedMessage()的类必须已覆盖getLocalizedMessage()方法。如果没有,则调用其中一个父类(super class)的方法,默认情况下,该方法仅返回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,则需要使用它。但是大多数应用程序并不需要,因为大多数错误消息不是针对最终客户的,而是针对支持工程师/开发工程师的。

    09-27 11:56