[解決済み] e.getMessage()とe.getLocalizedMessage()の相違点
質問
- この2つのメソッドを使用して、catchメソッドでスローされるメッセージを取得します。 ブロックはエラー処理中に
- どちらもエラー処理からメッセージを受け取ります。 この2つは具体的にどう違うのか
- ネットで検索してみると、こんな答えが返ってきました。 こちら
Java の例外は、getMessage と getLocalizedMessage を継承しています。 メソッドを Throwable から継承しています (関連リンク参照)。違いは サブクラスは、getLocalizedMessageをオーバーライドして ロケール固有のメッセージです。例えば、あなたが アメリカ英語を話す会社/グループのコードから イギリス英語のグループ カスタム Exception クラスを作成することもできます。 getLocalizedMessageをオーバーライドし、スペルや文法を修正します。 あなたのコードを使用するユーザーや開発者が想定するように を期待します。これは、Exceptionの実際の翻訳にも使用できる。 のメッセージを表示します。
質問内容 ::
-
ということでしょうか?
language specific
の実装は?e.getLocalizedMessage()
の場合 例えば、私のアプリはEnglish
- でエラーがスローされます。English
もし、私が で私のアプリを使用します。Spanish
- でエラーが発生します。Spanish
-
これらのメソッドをいつ、どこで使えるのか、明確な説明が必要です。 自分の用途に合わせて
解決方法は?
皆さんもおっしゃっているように--。
私の理解では
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());
}
}
デフォルトでは、"English"環境で実行した場合、"English"キー値を返します。ローカルをフランスに設定すると、message_frファイルからの出力が得られます。
どんな時に使うか
アプリケーションがl10n/i18nをサポートする必要がある場合、これを使用する必要があります。しかし、ほとんどのエラーメッセージはエンドカスタマー向けではなく、サポートエンジニア/開発エンジニア向けなので、ほとんどのアプリケーションはその必要がないのです。
関連
-
[解決済み】"実引数リストと形式引数リストの長さが異なる"
-
[解決済み] Androidのgravityとlayout_gravityの違いは何ですか?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] StringBuilderとStringBufferの違いについて
-
[解決済み] match_parentとfill_parentの違いは何ですか?
-
[解決済み] wait()とsleep()の違いについて
-
[解決済み] JDKとJREの違いは何ですか?
-
[解決済み】「px」、「dip」、「dp」、「sp」の違いは?
-
[解決済み】HashMap、LinkedHashMap、TreeMapの違いについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Hibernateエラー:同じ識別子値を持つ別のオブジェクトがすでにセッションに関連付けられました。
-
[解決済み] java.sql.SQLException: ユーザー 'root'@'localhost' (using password: YES) のためのアクセスが拒否されました。
-
[解決済み】StringUtils.isBlank() vs String.isEmpty()
-
[解決済み] hibernate のプロパティが見つかりません。
-
[解決済み] メソッドがスーパータイプのメソッドをオーバーライドまたは実装していない - Overrideの場合
-
[解決済み】Eclipseがエラーメッセージ "Java was started but returned exit code = 1" を返す
-
[解決済み】java.io.IOException: 壊れたパイプ
-
[解決済み] [Solved] java.lang.NoClassDefFoundError: クラスXXXを初期化できませんでした。
-
[解決済み] java.sql.SQLException を取得しました。ResultSet が終了した後の操作は許可されません。
-
[解決済み】接続Java - MySQL : 公開鍵の取得は許可されていません。