다음 스 니펫은 문자열 상수 및 리터럴을 재사용 함에도 불구하고 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