1

以下のようなカスタム注釈があるとしましょう。

public @interface myLimits {

    int MIN_LIMIT = 400;

    int stockLimit() default MIN_LIMIT;
}

注釈定義で MIN_LIMIT の値をハードコーディングする代わりに、それをプロパティ ファイルに外部化できますか?

以下のようなもの - 「min.limit」がプロパティファイルで定義されていると仮定します。

public @interface myLimits {

    @value("${min.limit}")
    int MIN_LIMIT;

    int stockLimit() default MIN_LIMIT;
}

MIN_LIMITハードコーディングの代わりに外部化するにはどうすればよいですか?

4

1 に答える 1

1

厳密に言えば、できません。注釈は、残りのコードの前に別のコンパイル ラウンドで処理されます。つまり、注釈内のどこにでも現れるものはすべて、コンパイル時の定数でなければなりません。

これについてJLSが言わなければならないことは次のとおりです。

次の条件のいずれかが真である場合にのみ、要素型 T は要素値 V と同等です。

  • T は配列型 E[] であり、次のいずれかです。
    • V は ElementValueArrayInitializer であり、V の各 ElementValueInitializer (配列初期化子の変数初期化子に類似) は E に対応しています。
    • または、V は T に対応する ElementValue です。
  • V の型は、T と代入互換 (§5.2) であり、さらに:
    • T がプリミティブ型または文字列の場合、V は定数式です (§15.28)。
    • V はヌルではありません。
    • T がクラス、またはクラスの呼び出しで、V がクラス リテラルの場合 (§15.8.2)。
    • T が列挙型で、V が列挙定数の場合。

要素の型が ElementValue と一致しない場合は、コンパイル時エラーになります。

于 2012-06-19T08:32:04.497 に答える