SimpleJavaFileObject — JavaFileObject의 단순 구현 클래스
SimpleJavaFileObject — JavaFileObject의 단순 구현 클래스
JavaFileObject를 직접 구현하려면 메서드가 많아서 번거로워요. SimpleJavaFileObject는 JavaFileObject의 대부분 메서드를 단순하게 구현해 놓은 클래스예요. 상속해서 쓰는 것을 전제로 설계됐어요.
이 클래스를 상속받아 필요한 메서드만 오버라이드하면, JavaFileObject 구현체를 빠르게 만들 수 있어요. 특히 메모리 안에서 소스 코드를 컴파일하는 등 사용자 정의 파일 객체를 만들 때 아주 흔히 쓰여요.
본문
클래스 선언은 다음과 같아요.
public class SimpleJavaFileObject
extends Object
implements JavaFileObject
주요 생성자와 메서드는 다음과 같아요.
protected SimpleJavaFileObject(URI uri, JavaFileObject.Kind kind)
public JavaFileObject.Kind getKind()
public boolean isNameCompatible(String simpleName, JavaFileObject.Kind kind)
public NestingKind getNestingKind()
public Modifier getAccessLevel()
public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException
public InputStream openInputStream() throws IOException
public OutputStream openOutputStream() throws IOException
- 생성자로 URI와 종류(
Kind)를 받아요. - 기본 구현은 대부분 단순한 값을 반환해요. 예를 들어
getNestingKind()는TOP_LEVEL,getAccessLevel()은PUBLIC을 반환해요. getCharContent,open*Stream등 실제 입출력이 필요한 메서드는 하위 클래스에서 오버라이드해 구현해야 해요. 기본 구현은UnsupportedOperationException을 던져요.
전형적인 용법은 이래요. 메모리에 있는 소스 문자열을 컴파일 대상으로 만들기 위해 getCharContent만 오버라이드한 서브클래스를 만드는 것이에요.
JavaFileObject source = new SimpleJavaFileObject(uri, Kind.SOURCE) {
public CharSequence getCharContent(boolean ignoreEncodingErrors) {
return code; // 컴파일할 소스 문자열
}
};
이 클래스는 javax.tools 패키지에 속해요.