- 履歴一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- Java/enum要素のアノテーションを取得する へ行く。
- 1 (2013-02-19 (火) 06:25:33)
関連†
- Java
- enum
概要†
enum要素のアノテーションをenumのメソッドで取得します。
次のようにenum Testを定義しているとき
enum Test { @Foo HOGE, }
次のように取得したい。
Foo foo = Test.HOGE.getFoo();
方法†
enum Test { @Foo HOGE, Foo getFoo() { return this.getClass().getField(this.name()).getAnnotation(Foo.class); } }
※実際にはもっとスコープの指定とか例外処理とかが必要です
解説†
アノテーションは静的な定義なのでオブジェクトからではなくクラスから取得することができます。 さらに今回取得したい対象のenum要素はフィールドなのでクラスからフィールドをたどる必要があります。
- this.getClass()
- インスタンスなフィールド(this)から静的なクラス(Test)を取得します
- .getField(this.name())
- 静的なクラス(Test)から静的なフィールド(HOGE)を取得します
- .getAnnotation(Foo.class)
- 静的なフィールド(HOGE)からアノテーション(Foo)を取得します
少し面倒ですね。