- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
使用 Java 注释处理器我有以下类型:
@NameToken(value={"startPage"})
public interface MyProxy extends Proxy<StartPagePresenter> {
}
和:
public interface Proxy<T> { }
我有 TypeElement
的 Proxy
作为:
TypeElement pProxyTypeElement = // ...
现在我想获取类型参数的TypeElement <StartPagePresenter>
.
我试过:
List<? extends TypeParameterElement> proxyTypeParamElems =
proxyTypeElement.getTypeParameters();
TypeParameterElement firstParameter = proxyTypeParamElems.get(0);
当我打印 firstParameter.getSimpleName()
时我得到 T
而不是 StartPagePresenter
.
我如何获得真正的 TypeElement
StartPagePresenter 来自 TypeParameter?
最佳答案
要访问通用参数,您需要将 TypeMirror
转换为 DeclaredType
。 DeclaredType
有一个方法 getTypeArguments()
,它返回一个 TypeMirror
列表,表示具体声明的通用参数:
按照你的例子:
Set<? extends Element> proxyElements = roundEnvironment.getElementsAnnotatedWith(NameToken.class);
for(Element element : proxyElements){
TypeElement typeElement = (TypeElement)element;
DeclaredType declaredType = (DeclaredType)typeElement.getInterfaces().get(0); //assuming there is an interface
for(TypeMirror genericParameter : declaredType.getTypeArguments()){
messager.printMessage(Diagnostic.Kind.NOTE, genericParameter.toString());
}
}
应该打印 StartPagePresenter
我更喜欢使用随 API 提供的各种访问者来平滑此转换。
关于java - 从 Java 注释处理器的通用 TypeParameterElement 获取 TypeElement?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29922668/
我的库中有几个包,其中包含注释和基类。我在这个问题的上下文中扩展了 javax.annotation.processing.AbstractProcessor 。 有没有办法获取包中声明的所有类型的
我正在编写自定义注释处理器。虽然我可以处理没有泛型类型的类类型,但无法获取泛型类型的实际类型。 MyBase 界面 interface MyBase { void method1(S, T); }
我正在编写一个在 javac 中运行的注解处理器。它扫描带注释的类并生成包含类名的资源文件。这些名称将在运行时使用,以便能够获得 Class感谢Class.forName(String) . 如何从
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
getInterfaces() TypeElement 的方法只返回元素直接实现的接口(interface)。是否有一种简单的方法来查找给定的 TypeElement 是否间接实现了给定的接口(int
我有一个类: public class StartPagePresenter extends AbstractPresenter { ... } 使用 Java Annotation Processi
我正在开发一个带有注释处理的代码生成器,并将逻辑分为 2 个步骤: 分析带注释的元素并创建数据模型,以及 使用数据模型使用 JavaPoet 生成代码。 在大多数情况下,注释处理 API 为我们提供了
我正在实现注释处理库,该库使用基于具有特定注释的类的 Java Poetr 生成代码。 为了也使用 kotlin 编写的类,我在示例项目中切换到 kapt 而不是 apt。它与带注释的 java 类一
我不明白如何在注释处理器中检索枚举值。 我的注释是自定义 Java Bean Validation 注释: @StringEnumeration(enumClass = UserCivility.
使用 Java 注释处理器我有以下类型: @NameToken(value={"startPage"}) public interface MyProxy extends Proxy { } 和: p
我正在编写一个注释处理器,并且我有一个带有 @Inherited 的注释“a”。这意味着,对于代表类“c”的任何元素“e”,该类“c”扩展了我的注释实际存在的类,我将得到 e.getAnnotatio
我编写了一个接受 java.lang.Class 对象的注释。我想将带注释的类和注释值作为键值对保存在文件中,但就我而言,只有当注释值类可从带注释的类分配时,这才有效。 现在,在我的注释处理器中,我从
我是一名优秀的程序员,十分优秀!