2

Java プロジェクトに、いくつかのデフォルト文字列を含む注釈があります。

public @interface MyInterface {
  String message() default "Dependency for field; must be set here";
  // ...
}

ここで国際化を行うにはどうすればよいですか? 私のクラスでは、ResourceManager を介して文字列をロードします

public class ValidationDocument {
    private String message = ResourceManager.findLiteral("ValidationDocument", "default.message");
    // ...
}

アノテーション定義で ResourceManager を読み込めません。ここで国際化を行うにはどうすればよいでしょうか?

4

1 に答える 1

1

そうです、注釈はコンパイル時に評価されるため、定数または定数のみを含む式しか使用できないため、それを行うことはできません。したがって、メソッドの呼び出しによって取得される情報など、実行時にのみ使用できる情報は、静的なものであっても、アノテーションに割り当てることはできません。

アノテーションは実行時に動的に変更されるようには設計されていないため、アプローチを変更する必要があります。

私は次のようなことを提案することしかできませんでした:

public @interface MyInterface {
  String messageKey() default "myinterface.mykey";
  // ...
}

次に、実際に@MyInterface注釈インスタンスを参照するコードは、 を使用しmessageKeyて 内のメッセージを検索しますResourceManager。あなたがそれで達成しようとしていることに応じてうまくいくかもしれません。

于 2014-12-23T13:47:02.543 に答える