Element — 프로그램 요소 인터페이스

Element — 프로그램 요소 인터페이스

Element는 모듈, 패키지, 클래스, 메서드 같은 프로그램 요소를 나타내는 인터페이스예요. 각 요소는 컴파일 시점의 언어 수준 구성 요소(가상 머신의 런타임 구성 요소가 아닌)를 나타내요. 이 인터페이스는 javax.lang.model 패키지의 javax.lang.model.element.Element로, 어노테이션 처리 중 다루는 각 언어 구조의 표현이에요.

요소는 equals(Object) 메서드로 비교해야 해요. 특정 요소가 항상 같은 객체로 표현된다는 보장은 없어요. Element 객체의 클래스에 기반한 연산을 구현하려면 방문자(visitor)를 쓰거나 getKind() 결과를 사용해요. instanceof는 이 모델링 계층에서 객체의 실제 클래스를 결정하는 신뢰할 만한 관용구가 아닐 수 있는데, 한 구현이 여러 Element 하위 인터페이스를 하나의 객체로 구현할 수 있기 때문이에요.

출처: Java API Reference

본문

슈퍼 인터페이스는 AnnotatedConstruct이고, 하위 인터페이스로 ExecutableElement, ModuleElement, PackageElement, TypeElement, VariableElement 등이 있어요. 선언은 다음과 같아요.

public interface Element extends AnnotatedConstruct

주요 메서드는 다음과 같아요.

Modifier and Type Method 설명
<R, P> R accept(ElementVisitor<R,P> v, P p) 이 요소에 방문자를 적용해요.
TypeMirror asType() 이 요소가 정의하는 타입을 반환해요.
<A extends Annotation> A getAnnotation(Class<A> annotationType) 지정된 타입의 어노테이션이 있으면 반환, 없으면 null.
List<? extends Element> getEnclosedElements() 이 요소에 직접 포함된 요소들을 반환해요.
Element getEnclosingElement() 이 요소를 포함하는 가장 안쪽 요소를 반환해요.
ElementKind getKind() 이 요소의 종류(kind)를 반환해요.
Set<Modifier> getModifiers() 어노테이션을 제외한 이 요소의 제어자들을 반환해요.
Name getSimpleName() 이 요소의 단순(비정규화) 이름을 반환해요.
  • getKind()PACKAGE, CLASS, INTERFACE, METHOD, FIELD 같은 종류를 알려줘요. 이 값으로 분기 처리해요.
  • getEnclosingElement()은 메서드가 속한 클래스처럼 포함 관계를 알려주고, getEnclosedElements()는 반대로 안에 든 멤버 목록을 돌려줘요.
  • getSimpleName()은 메서드·클래스 이름, asType()은 요소가 갖는 타입, getModifiers()public·static 같은 제어자를 얻을 때 써요.

요소를 방문하려면 ElementVisitor 계열을, 타입을 얻으려면 TypeMirror를 함께 참고해요. Since: 1.6.

더 알아보기 (Learn more)

Java 공식 API