JavaFileObject — 자바 소스·클래스 파일의 추상화 인터페이스

JavaFileObject — 자바 소스·클래스 파일의 추상화 인터페이스

컴파일러 도구가 다루는 자바 소스 파일과 클래스 파일은 일반 FileObject에 몇 가지 자바 특유의 속성이 더해져 있어요. JavaFileObject는 그런 자바 소스·클래스 파일을 위한 파일 추상화 인터페이스예요. FileObject를 확장해요.

파일의 종류(.java, .class 등)와 클래스 이름 호환성, 중첩 상태, 접근 수준 같은 정보를 제공해요.

출처: Java API Reference

본문

JavaFileObject는 인터페이스로 FileObject를 확장하며, 중첩 enum KindNestingKind를 정의해요.

public interface JavaFileObject extends FileObject

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

JavaFileObject.Kind getKind()
boolean isNameCompatible(String simpleName, JavaFileObject.Kind kind)
NestingKind getNestingKind()
Modifier getAccessLevel()
  • getKind() — 파일의 종류(SOURCE, CLASS, HTML, OTHER)를 돌려줘요.
  • isNameCompatible(...) — 파일 이름이 주어진 단순 클래스명과 종류와 호환되는지 검사해요.
  • getNestingKind() / getAccessLevel() — 파일이 나타내는 타입의 중첩 상태(TOP_LEVEL, MEMBER 등)와 접근 수준(PUBLIC 등)을 돌려줘요.

JavaFileObject.Kind.java=SOURCE, .class=CLASS, .html=HTML, 그 외는 OTHER를 정의해요. 컴파일러는 이 정보를 바탕으로 각 파일을 어떻게 다룰지 판단해요.

FileObject와 마찬가지로 모든 메서드는 SecurityException을, 명시적으로 허용되지 않는 한 null 인자에 대해 NullPointerException을 던질 수 있어요. javax.tools 패키지에 속해요.

더 알아보기 (Learn more)