注釈値に定数を使用したいと思います。それはこの場所で配列イニシャライザなければならないよう注釈に配列定数を使用する方法
interface Client {
@Retention(RUNTIME)
@Target(METHOD)
@interface SomeAnnotation { String[] values(); }
interface Info {
String A = "a";
String B = "b";
String[] AB = new String[] { A, B };
}
@SomeAnnotation(values = { Info.A, Info.B })
void works();
@SomeAnnotation(values = Info.AB)
void doesNotWork();
}
定数Info.A
とInfo.B
アレイInfo.AB
注釈ではなく、使用することができます。アノテーション値は、クラスのバイトコードにインライン化できる値に制限されています。 Info
がロードされたときに構成されなければならないので、これはアレイ定数に対しては不可能です。この問題の回避策はありますか?
Eclipseのエラーをコンパイルきわめて明確である:「注釈属性Client.doesNotWork.valuesの値が配列初期化子でなければなりません」。それは非常に明確ですが、私は回避策はないと思います。 – skaffman