我能否将类的名称作为编译时常量获取,而无需将其硬编码在字符串文本中?
2022-09-02 13:55:16
我正在研究注释处理器。此代码编译:
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
}
}
但是,我对弦常数“沙子”感到不满。Foo“(在这种情况下不是太多,但对未来来说更一般)。
如果 重命名或移动到另一个包,此代码仍将编译,但不起作用。Foo
我想做这样的事情:
@SupportedAnnotationTypes(Foo.class)
这样,如果 Foo 的名称发生更改,编译将失败,并且必须有人更正该文件。
但这不起作用,因为 a 不是 .所以我尝试了:Class
String
@SupportedAnnotationTypes(Foo.class.getName())
但是编译器不认为这是一个常量表达式,而在此上下文中是必需的,因此这也不起作用。
有没有办法在编译时强制类文字进入其名称?