java - 通过 Java 注解处理器创建基类

标签 java annotations annotation-processing

我想使用注释处理器来生成被注释类的基类。像这样的事情:

@ClassGenerator(name="FakeClass") // Generates FakeClass
public class MyClass extends FakeClass {
    ...
}

这可能吗?或者我应该看看其他模式。

最佳答案

要直接回答问题...当然,您只需扫描 ClassGenerator 并生成缺少的类。这是一个基本的工作处理器:

@SupportedAnnotationTypes("ClassGenerator")
@SupportedSourceVersion(SourceVersion.RELEASE_6)
public class BaseClassProcessor extends AbstractProcessor {

    private Elements elements;

    @Override
    public synchronized void init(ProcessingEnvironment processingEnv) {
        super.init(processingEnv);
        elements = processingEnv.getElementUtils();
    }

    @Override
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
        for (Element element : roundEnv.getElementsAnnotatedWith(ClassGenerator.class)) {
            TypeMirror mirror = ((TypeElement) element).getSuperclass();

            PackageElement pacakgeElement = elements.getPackageOf(element);
            String packageName = pacakgeElement.getQualifiedName().toString();
            String superClassName = ((DeclaredType) mirror).asElement().getSimpleName().toString();

            try {
                Writer file = processingEnv.getFiler().createSourceFile(packageName + "." + superClassName).openWriter();
                file.write(String.format("package %s; public class %s {}", packageName, superClassName));
                file.flush();
                file.close();
            } catch (IOException ex) {
                Logger.getLogger(BaseClassProcessor.class.getName()).log(Level.SEVERE, null, ex);
            }

        }
        return true;
    }
}

至于这种模式是否可取或最佳,您必须分析您的需求并确定这是否满足您的需求。

关于java - 通过 Java 注解处理器创建基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25919428/

相关文章:

Java使用父类型的对象引用访问不同包中子类中的 protected 成员

java - 方形单元格的方形 GridPane

kubernetes 如何从命名空间注解继承注解继承

java - 谁能解释一下类级 Controller 和方法级 Controller 之间的区别..?

java - 我无法从 JPQL 选择特定列?

java - 使用 Java 注释处理器查找注释方法的方法参数?

java - 是否可以在注释处理环境中获取包中的所有 TypeElement?

java - 错误: “; Expected Not a statement ”

Java setter 和 getter

java - 注释从 Immutables 接口(interface)奇怪地传递到实现