gpt4 book ai didi

java - 从 Java 注释处理器的通用 TypeParameterElement 获取 TypeElement?

转载 作者:搜寻专家 更新时间:2023-10-31 19:32:48 25 4
gpt4 key购买 nike

使用 Java 注释处理器我有以下类型:

@NameToken(value={"startPage"})
public interface MyProxy extends Proxy<StartPagePresenter> {
}

和:

public interface Proxy<T> { }

我有 TypeElementProxy作为:

TypeElement pProxyTypeElement = // ...

现在我想获取类型参数的TypeElement <StartPagePresenter> .

我试过:

List<? extends TypeParameterElement> proxyTypeParamElems = 
proxyTypeElement.getTypeParameters();
TypeParameterElement firstParameter = proxyTypeParamElems.get(0);

当我打印 firstParameter.getSimpleName() 时我得到 T而不是 StartPagePresenter .

我如何获得真正的 TypeElement StartPagePresenter 来自 TypeParameter?

最佳答案

要访问通用参数,您需要将 TypeMirror 转换为 DeclaredTypeDeclaredType 有一个方法 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com