Pre*_*rno 6 java metaprogramming javac annotation-processing
我的库中有几个包含注释和基类的包。我在这个问题的上下文中扩展了 javax.annotation.processing.AbstractProcessor 。
有没有办法获取包中声明的所有类型的 java.lang.TypeElement 的列表/数组/集合?甚至元素?
目前,我有一个解决方法,通过使用类型上的注释将类标记为组,该类型仅存在于表示库中的相关对象组。是否有更简单的方法按包(即位置)而不是显式声明将类型分组在一起?
找到了答案 - 我使用ProcessingEnvironment实例变量(在我的AbstractProcessor子类中)来获取javax.lang.model.util.Elements实例来执行真正有用的元素/类型/包访问:
List<TypeMirror> typeMirrorsInPackage = processingEnv.getElementUtils()
.getPackageElement("com.example.sample.annotations")
.getEnclosedElements()
.stream()
.map(Element::asType)
.filter(mirror -> mirror.getKind() == TypeKind.DECLARED)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
请小心,根据javadoc:如果这是通用元素,则返回原型类型。这是元素对与其自己的形式类型参数相对应的类型变量的调用。显然Types类有更有用的实用方法来处理泛型。
| 归档时间: |
|
| 查看次数: |
1192 次 |
| 最近记录: |