アノテーションの要素が配列の場合のデフォルト値

こーやればできんのかと思ってた

String[] value() default new String[]{"hoge", "foo"};


でもできねー。
てきとーやってたら、こんな感じで出来た。

String[] value() default {"hoge", "foo"};

初めて知った。
というか、Eclipseで親切にこんなエラーが出るんだから、
ちゃんと訳せ>自分


The value for annotation attribute XXX.value must be an array initializer




で、なんだか時間があったので、こんなことをやってみる。

public class AnnotationTest {

    @Target(ElementType.FIELD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Hoge {
        String[] value();
    }
    
    @Hoge({"hoge", "foo"})
    private String field = null;
    
    public static void main(String[] args) throws Exception {
        AnnotationTest instance = new AnnotationTest();
        Field field = instance.getClass().getDeclaredField("field");
        String[] values = field.getAnnotation(Hoge.class).value();
        
        System.out.println(Arrays.toString(values));
        values[0] = "foo";
        System.out.println(Arrays.toString(values));
        System.out.println(Arrays.toString(field.getAnnotation(Hoge.class).value()));
    }

}

配列の値を変えちゃうというテスト。
これの実行結果。


[hoge, foo]
[foo, foo]
[hoge, foo]
アノテーションの値ってやっぱ変わらないんだなーってことで。
ま、当たり前か。