我正在开发注释处理器。此代码编译:
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 的名称更改,编译将失败,并且必须有人更正文件。
但这不起作用,因为 aClass
不是 a String
。所以我尝试了:
@SupportedAnnotationTypes(Foo.class.getName())
但是编译器不认为这是一个常量表达式,在这种情况下这是必需的,所以它也不起作用。
有没有办法在编译时将类文字强制转换为其名称?