从java注解处理器的泛型typeparameterelement获取typeelement?

u91tlkcl  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(343)

使用java注解处理器,我有以下类型:

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

以及:

public interface Proxy<T> { }

我有 TypeElementProxy 作为:

TypeElement pProxyTypeElement = // ...

现在我想得到type参数的typeelement <StartPagePresenter> .
我试过:

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

当我打印时 firstParameter.getSimpleName() 我明白了 T 而不是 StartPagePresenter .
我怎样才能得到真实的 TypeElement 从typeparameter开始startpagepresenter?

798qvoo8

798qvoo81#

要访问泛型参数,需要 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提供的各种访问者来平滑这个转换。

相关问题