2011-09-16 10 views
3

私は次の問題に直面しています。誰もがそれがなぜそう理解できるのか? また、2番目のシナリオを作成する際の考えを共有してください。@Named注釈にキーを動的に渡す

  1. これは、任意のコンパイルの問題もなく動作しますが、

    private final String var ="US"; 
    @Inject @Named (var) private Validator validator; 
    
  2. これは、 コンパイル・エラーがコンパイルエラーを与えている:

    「注釈属性Named.valueの値は定数式でなければなりません」
    private final String var =System.getProperty("US"); 
    @Inject @Named (var) private Validator validator; 
    

答えて

3

最初のケースでは、コンパイラはconsta ntはプライベート最終変数に割り当てられているので、変数を最適化してその場所で定数を使用します。後者の場合、それはできませんので、注釈に変数が残っています。

+2

ここで重要な点は、注釈属性がリテラル(つまり定数)でなければならないということです。これはJava 5(以上)言語が指定(実装)されている方法です。この事実を回避する方法はありません。 – jfpoilpret

+0

@jfpoilpret合意。 – RichW

関連する問題