java – Annotation Processor – 如何获取它正在处理的类
发布时间:2020-12-14 05:03:21 所属栏目:Java 来源:网络整理
导读:我正在尝试编写一个自定义的Anntoation处理器. 注释处理器将在编译时处理每个类文件以检查注释, 但是我怎么能得到它正在处理的课程呢? 我只能在以下代码中获取类名. public class AnnotationProcessor extends AbstractProcessor { ...... @Override public
我正在尝试编写一个自定义的Anntoation处理器.
注释处理器将在编译时处理每个类文件以检查注释, 但是我怎么能得到它正在处理的课程呢? 我只能在以下代码中获取类名. public class AnnotationProcessor extends AbstractProcessor { ...... @Override public boolean process(Set<? extends TypeElement> annotations,RoundEnvironment roundEnv) { Set<? extends Element> rootE=roundEnv.getRootElements(); for(Element e: rootE) { if(e.getKind()==ElementKind.CLASS) { String className= e.getSimpleName().toString(); processingEnv.getMessager().printMessage( javax.tools.Diagnostic.Kind.WARNING,className,e); } } } 解决方法
您无法访问注释处理器正在处理的类,因为尚未编译类.相反,Java提供了类似的Elements api,用于输入源的反射式检查.
Element(通过使用roundEnv.getRootElements()找到)有关于正在编译的类的更多信息,而不仅仅是它的名称.使用ElementVisitors可以找到大量有用的信息: http://docs.oracle.com/javase/6/docs/api/javax/lang/model/element/ElementVisitor.html 包括类构造函数,方法,字段等. 以下是如何使用它: public class AnnotationProcessor extends AbstractProcessor { ...... @Override public boolean process(Set<? extends TypeElement> annotations,RoundEnvironment roundEnv) { Set<? extends Element> rootE=roundEnv.getRootElements(); for(Element e: rootE) { for(Element subElement : e.getEnclosedElements()){ subElement.accept(new ExampleVisitor(),null); // implement ExampleVisitor } } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |