当前位置: 首页 > 知识库问答 >
问题:

从Java注释处理器的泛型TypeParameterElement获取TypeElement?

上官淮晨
2023-03-14

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

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

并且:

public interface Proxy<T> { }

我有ProxyTypeElement为:

TypeElement pProxyTypeElement = // ...

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

我试过了:

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

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

如何从TypeParameter中获取真正的TypeElementStartPagePresenter?

共有1个答案

颜高格
2023-03-14

要访问泛型参数,需要将类型镜像转换为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());
        }
    }

应打印开始页面预览

我更喜欢使用API提供的各种访问者来平滑这种铸造。

 类似资料:
  • 问题内容: 我有一个名为@Pojo的自定义注释,可用于自动生成Wiki文档: 我这样使用它: 注释资源方法,以便注释处理器可以自动生成描述所需资源和类型的Wiki页面。 我需要在注释处理器中读取该字段的值,但出现运行时错误。 在我的处理器的源代码中,我有以下几行: 但实际的类不适用于处理器。我认为我需要一个替代品来代替实际课程。我不确定该怎么买。 我得到的错误是: 该是我的一个提到的一类注释。 不

  • 我正在使用注释处理器来处理方法参数的注释。 用于参数的注释类型有一个注释@参数 现在,当注释处理器运行时,我想检查参数注释()是否有参数注释。我通过执行以下代码来实现这一点。 由于某种原因,arg始终为空。是否有注释未返回的原因?

  • 我试图使用注释处理器来生成特定工厂接口的实现。这些接口如下所示: 和 注释处理器正在做正确的事情,并为每个匹配的类生成一个工厂,该工厂用相应的注释进行注释。 注释处理器的输出如下所示: 以及相应的其他类: 但是不能编译TestViewImFactory。错误消息是: “类'TestViewImplFactory'必须声明为抽象或在'ViewFactory'中实现抽象方法创建” Java说,以下是正

  • 如何获取这个类的类型?对于上下文,我使用ModelMapper,我需要类类型T从S转换为T。 背景: 我已经尝试了N种方法,其中我放置了“//一些方法来获取类型”,但没有任何效果。例如: 或

  • 问题内容: 我正在编写我的第一个注释处理器,但遇到一些琐碎的问题,但找不到任何有关它的信息。 我有一个带有注释的元素 当我将此属性作为处理器中的元素获取时,我似乎无法以任何方式获取元素的类型。在这种情况下,可能要获取代表String的Class或TypeElement实例。 我尝试使用实例化容器类型的类对象,但它引发了ClassNotFoundException。我认为这是因为我无法访问包含该类的

  • 问题内容: 我正在为Eclipse构建注释处理器插件,我想做的是在处理过程中检查项目文件夹中的几个文件。 我想知道如何从处理器中获取项目路径。我相信可以这样做,因为项目源路径已提供给处理器-但我找不到找到它的方法。 我尝试查看System.properties和processingEnv.getOptions(),但那里没有有用的信息。 最终,我也想在Netbeans上使用此注释处理器,因此,如果