使用Java Annotation Processors我有以下类型:
@NameToken(value={"startPage"})
public interface MyProxy extends Proxy<StartPagePresenter> {
}
和:
public interface Proxy<T> { }
我的TypeElement
Proxy
为:
TypeElement pProxyTypeElement = // ...
现在我想获得Type参数<StartPagePresenter>
的TypeElement。
我试过了:
List<? extends TypeParameterElement> proxyTypeParamElems =
proxyTypeElement.getTypeParameters();
TypeParameterElement firstParameter = proxyTypeParamElems.get(0);
当我打印firstParameter.getSimpleName()
时,我得到T
而不是StartPagePresenter
。
如何从TypeParameter中获取真实的TypeElement
StartPagePresenter?
答案 0 :(得分:8)
要访问通用参数,您需要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提供的各种访问者来平滑此投射。