私は注釈プロセッサに取り組んでいます。このコードは次のようにコンパイルされます。
package sand;
import java.util.Set;
import javax.annotation.processing.AbstractProcessor;
import javax.annotation.processing.RoundEnvironment;
import javax.annotation.processing.SupportedAnnotationTypes;
import javax.lang.model.element.TypeElement;
@SupportedAnnotationTypes("sand.Foo")
public class FooProcessor extends AbstractProcessor {
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
return false; // TODO
}
}
ただし、文字列定数「sand.Foo」には不満があります (この場合はそれほど多くはありませんが、将来的にはより一般的になります)。
名前を変更したり、別のパッケージに移動した場合Foo
でも、このコードはコンパイルされますが、機能しません。
私は次のようなことをしたいと思います:
@SupportedAnnotationTypes(Foo.class)
そうすれば、Foo の名前が変更された場合、コンパイルが失敗し、誰かがファイルを修正する必要があります。
しかし、 a は aClass
ではないため、これは機能しませんString
。だから私は試しました:
@SupportedAnnotationTypes(Foo.class.getName())
しかし、コンパイラはこれを、このコンテキストで必要な定数式と見なさないため、これも機能しません。
コンパイル時にクラス リテラルをその名前に強制する方法はありますか?