AnnotatedConstruct — 어노테이션 가능 구성 요소 인터페이스
AnnotatedConstruct — 어노테이션 가능 구성 요소 인터페이스
AnnotatedConstruct는 어노테이션될 수 있는 구성 요소(construct)를 나타내는 인터페이스예요. 구성 요소는 요소(element) 또는 타입(type)이에요. 요소에 달린 어노테이션은 선언(declaration)에 대한 것이고, 타입에 달린 어노테이션은 타입 이름의 특정 사용(use)에 대한 것이에요.
Java 언어 명세(JLS) 9.7.4에 따르면 요소에 달린 어노테이션은 선언 어노테이션(declaration annotation), 타입에 달린 어노테이션은 타입 어노테이션(type annotation)이에요. 이 인터페이스 전체에서 직접 존재(directly present), 존재(present), 간접 존재(indirectly present), 연관(associated)이라는 용어로 이 인터페이스의 메서드가 반환하는 어노테이션을 정확히 설명해요.
본문
이 인터페이스의 하위 인터페이스로 Element, TypeMirror 계열(예: ArrayType, DeclaredType, ExecutableType 등)이 있어요. 선언은 다음과 같아요.
public interface AnnotatedConstruct
어노테이션 A는 다음 중 하나를 만족하면 구성 요소 C에 직접 존재해요.
- A가 C의 소스 코드 표현에 적용되도록 명시적 또는 암묵적으로 선언됐을 때. C의 소스에 타입 AI의 어노테이션이 정확히 하나 있으면 A는 C에 명시적으로 선언된 거예요. 레코드 컴포넌트의 타입 AI 어노테이션은 관련 필수 멤버로 암묵적으로 전파될 수 있어요(JLS 8.10.1).
- A의 표현이 C의 실행 출력(예: 클래스 파일의
RuntimeVisibleAnnotations(JVMS 4.7.16) 또는RuntimeVisibleParameterAnnotations(JVMS 4.7.17) 속성)에 나타날 때.
어노테이션 A는 존재한다고 하려면, A가 C에 직접 존재하거나, 타입 AI 어노테이션이 C에 직접 존재하지 않고 C가 클래스이며 AI가 상속 가능하고 A가 C의 슈퍼클래스에 존재하면 돼요. 간접 존재는 AI가 반복 가능(containing) 어노테이션 인터페이스 AIC를 가질 때, AIC 타입 어노테이션이 C에 직접 존재하고 A가 그 AIC 어노테이션의 value 메서드 결과에 포함된 경우를 뜻해요.
주요 메서드:
| Modifier and Type | Method | 설명 |
|---|---|---|
<A extends Annotation> A |
getAnnotation(Class<A> annotationType) |
지정된 타입의 어노테이션이 존재하면 반환하고, 없으면 null을 반환해요. |
List<? extends AnnotationMirror> |
getAnnotationMirrors() |
이 구성 요소에 직접 존재하는 어노테이션들을 반환해요. |
<A extends Annotation> A[] |
getAnnotationsByType(Class<A> annotationType) |
이 구성 요소와 연관된 어노테이션들을 반환해요. |