2012-02-05 12 views
4

なぜ次のコードのコンパイルを行います。定数注釈パラメータを計算できないのはなぜですか?

final String name = "works"; 
@Provides @Named(name) String provideAboutTitle() { 
    return "ABC"; 
} 

をしかし、次のコードは、(少なくとも、Eclipseのコンパイラで)失敗します。

final String name = UUID.randomUUID().toString(); 
@Provides @Named(name) String provideAboutTitle() { 
    return "ABC"; 
} 

Eclipseのコンパイラは次のエラーを返します。

The value for annotation attribute Named.value must be a constant expression

+1

第2の例は定数ではありませんか? –

+0

可能なソリューションについては、こちらも参照してください。 http://stackoverflow.com/questions/13253624/how-to-supply-enum-value-to-an-annotation-from-a-constant-in-java – atom88

答えて

4

エラーメッセージの定数式Eclipse要求はコンパイル時の定数exprです(最終変数だけでなく)メソッド呼び出しUUID.randomUUID().toString();は、実行時に評価する必要があります。

write dynamic annotation values using JavaAssist at runtimeでも可能ですが、アノテーションの「読みやすい」機能は失われます。

+0

こちらもご覧ください可能な解決策: http://stackoverflow.com/questions/13253624/how-to-supply-enum-value-to-an-annotation-from-a-constant-in-java – atom88

関連する問題