儘管重複使用字符串常量和字面量,以下代碼片段將打印4個不同的哈希代碼。爲什麼字符串值不在註釋元素上?爲什麼註釋字符串值不會被攔截?
public class Foo {
@Retention(RetentionPolicy.RUNTIME)
@interface Bar {
String CONSTANT = "foo";
String value() default CONSTANT;
}
public static void main(String[] args) throws Exception {
System.out.println(System.identityHashCode(Bar.CONSTANT));
System.out.println(System.identityHashCode(Foo.class.getMethod("test1").getAnnotation(Bar.class).value()));
System.out.println(System.identityHashCode(Foo.class.getMethod("test2").getAnnotation(Bar.class).value()));
System.out.println(System.identityHashCode(Foo.class.getMethod("test3").getAnnotation(Bar.class).value()));
}
@Bar
public void test1() {}
@Bar("foo")
public void test2() {}
@Bar(Bar.CONSTANT)
public void test3() {}
}
註釋字符串文字不是代碼的一部分,並沒有受到相同的規則在代碼字符串文字標註值,所以他們應該彙集在一起真的沒有理由。 – EJP