通过Java Annotation Processor创建基类
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过Java Annotation Processor创建基类相关的知识,希望对你有一定的参考价值。
我想使用注释处理器来生成要注释的类的基类。像这样的东西:
@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 Annotation Processor创建基类的主要内容,如果未能解决你的问题,请参考以下文章