import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.TYPE) @Retention(RetentionPolicy.SOURCE) public @interface MyAnnotation { String value(); } import javax.annotation.processing.AbstractProcessor; import javax.annotation.processing.ProcessingEnvironment; import javax.annotation.processing.RoundEnvironment; import javax.annotation.processing.SupportedAnnotationTypes; import javax.annotation.processing.SupportedSourceVersion; import javax.lang.model.SourceVersion; import javax.lang.model.element.TypeElement; import java.io.IOException; import java.io.Writer; import java.util.Set; @SupportedAnnotationTypes("com.example.MyAnnotation") @SupportedSourceVersion(SourceVersion.RELEASE_8) public class MyAnnotationProcessor extends AbstractProcessor { @Override public synchronized void init(ProcessingEnvironment processingEnv) { super.init(processingEnv); } @Override public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) { for (TypeElement annotation : annotations) { Set<? extends Element> annotatedElements = roundEnv.getElementsAnnotatedWith(annotation); for (Element element : annotatedElements) { MyAnnotation myAnnotation = element.getAnnotation(MyAnnotation.class); String value = myAnnotation.value(); String newSourceCode = generateNewSourceCode(value); try (Writer writer = processingEnv.getFiler().createSourceFile("GeneratedClass").openWriter()) { writer.write(newSourceCode); } catch (IOException e) { e.printStackTrace(); } } } return true; } private String generateNewSourceCode(String value) { // ... } } com.example.MyAnnotationProcessor


上一篇:
下一篇:
切换中文