Java 如何在运行时使用注释处理API?
我已经并遵循了Internet上的一些注释处理工具(APT)指南(如and),并成功地使其在编译/构建时工作,甚至使其在Eclipse中工作 是否有一种方法可以在运行时使用APT使用注释获取类型(类)列表 我写了这样的东西:Java 如何在运行时使用注释处理API?,java,annotations,apt,Java,Annotations,Apt,我已经并遵循了Internet上的一些注释处理工具(APT)指南(如and),并成功地使其在编译/构建时工作,甚至使其在Eclipse中工作 是否有一种方法可以在运行时使用APT使用注释获取类型(类)列表 我写了这样的东西: @SupportedAnnotationTypes("com.domain.MyAnnotation") public class MyAbstractProcessor extends AbstractProcessor { public static Map&
@SupportedAnnotationTypes("com.domain.MyAnnotation")
public class MyAbstractProcessor extends AbstractProcessor {
public static Map<Element, MyAnnotation> patches = new HashMap<Element, MyAnnotation>();
@Override
public boolean process(final Set<? extends TypeElement> annotations, final RoundEnvironment roundEnvironment) {
// Get all classes that has the annotation
Set<? extends Element> classElements = roundEnvironment.getElementsAnnotatedWith(MyAnnotation.class);
// For each class that has the annotation
for (final Element classElement : classElements) {
patches.put(classElement, annotation);
@SupportedAnnotationTypes(“com.domain.MyAnnotation”)
公共类MyAbstractProcessor扩展了AbstractProcessor{
public static Map patches=new HashMap();
@凌驾
公共布尔过程(final Set您可以在运行时使用reflection-访问注释
要使用注释获取类列表(在类路径中),您可以在运行时遍历所有测试类(如果它们有注释)
或者,在构建时,您可以使用类列表构建一个类。您是否使用指定注释在运行时可用?
如果没有,您需要在您的上使用@Retention注释
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
String[] parameters();
String[] exceptions();
}
“或者-在构建时-您可以使用类列表构造一个类。”-您的意思是,输出到应用程序在运行时读取的文件?是的,使用processingEnv.getFiler().createSourceFile(qualifiedName).openWriter()
并将补丁的内容写入qualifiedname
类中的一个静态变量。当然,您必须编写所有必需的类样板文件`公共类simpleName{private static final Map<>patches=new Map<>{patches的内容}…哇,createSourceFile很棒。我不知道这是可能的。谢谢:-)是的,我知道了。源代码和运行时:-)通常它应该可以工作,使用此保留策略。如果它不适用于APT,您可以尝试JSR 269(可插拔注释处理)。