誰もが上で述べたように-
私の理解でgetMessage()は、例外の名前を返します。getLocalizedMessage()例外の名前をユーザーのローカル言語(中国語、日本語など)で返します。これを機能させるには、呼び出しgetLocalizedMessage()ているクラスがgetLocalizedMessage()メソッドをオーバーライドしている必要があります。そうでない場合は、そのスーパークラスの1つのメソッドが呼び出され、デフォルトでは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をサポートする必要がある場合は、それを使用する必要があります。ただし、ほとんどのエラーメッセージはエンドカスタマー向けではなく、サポートエンジニア/開発エンジニア向けであるため、ほとんどのアプリケーションでその必要はありません。