アノテーションオブジェクトの代入

アノテーションはAnnotatedElementに付与するものであって、それを取得するにはAnnotatedElement#getAnnotation()などを使うのが通常である。次のように、直接アノテーションを変数に代入したりはできない。

    Anno anno = @Anno("hoehoe"); // ... NG

ところが、アノテーションプロパティのデフォルト値としては記述できる。

public @interface Hoe {
    Anno anno() default @Anno("hoehoe");
}

こんなことができるとは知らなかったのでちょっと意外。