我在网上的一些教程中注意到,使用@interface关键字进行自定义注释的代码通常没有任何逻辑。环顾四周后,我发现消费者使用该注释查询该项目。这是我看到的链接: http://www.objectpartners.com/2010/08/06/how-do-annotations-work/
这里有代码可以找到注释并根据找到的内容进行操作。我的问题是,如果我做了一个注释,阻止在我的消费者去哪里使用字母a?我的注释@interface只是空的。消费者在编译时如何完成这项工作,例如?
我对注释的理解显然是有限的,所以希望我提出一个明确的问题。
谢谢!
答案 0 :(得分:2)
您需要编写注释处理器。
这是一个教程。 https://blogs.oracle.com/corejavatechtips/source-code-analysis-using-java-6-apis
这不是小事。
您必须编写自己的AnnotationProcessor
@SupportedSourceVersion(SourceVersion.RELEASE_6)
@SupportedAnnotationTypes("*")
public class CodeAnalyzerProcessor extends AbstractProcessor {
@Override
public boolean process(Set<? extends TypeElement> annotations,
RoundEnvironment roundEnvironment) {
for (Element e : roundEnvironment.getRootElements()) {
System.out.println("Element is "+ e.getSimpleName());
// Add code here to analyze each root element
}
return true;
}
}
然后,要在编译期间使用它,您必须将类作为值传递给javac的-processor
选项
javac -processor my.project.CodeAnalyzerProcessor TestClass.java