Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在运行时使用注释处理API?_Java_Annotations_Apt - Fatal编程技术网

Java 如何在运行时使用注释处理API?

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&

我已经并遵循了Internet上的一些注释处理工具(APT)指南(如and),并成功地使其在编译/构建时工作,甚至使其在Eclipse中工作

是否有一种方法可以在运行时使用APT使用注释获取类型(类)列表

我写了这样的东西:

@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(可插拔注释处理)。