【问题标题】:Find Method Arguments of annotated Method using Java Annotation Processor?使用Java注释处理器查找注释方法的方法参数?
【发布时间】:2015-07-06 20:34:16
【问题描述】:

我有以下注释:

@Target(ElementType.METHOD)
public @interface MyAnn {
}

还有一个用@MyAnn注解的方法:

  @MyAnn
  Object myMehtod(Object x) {
  ...
  }

使用 Java 注释处理器,我得到带注释的元素:

Element annotatedElement // = myMehtod 
  1. 如何获取此方法的返回类型?
  2. 如何获取此方法的参数?
  3. 如何获取此方法的参数名称?

【问题讨论】:

    标签: java annotations annotation-processing


    【解决方案1】:

    这是我的解决方案:

    ExecutableType executableType = (ExecutableType)annotatedElement.asType();
    List<? extends TypeMirror> parameters = executableType.getParameterTypes();
    TypeMirror param1 = parameters.get(0);
    DeclaredType declaredType = (DeclaredType)param1;
    List<? extends AnnotationMirror> anns = ((TypeElement)declaredType.asElement()).getAnnotationMirrors( );
    

    【讨论】:

    • ExecutableType executableType = (ExecutableType)annotatedElement.asType(); 导致我编译器错误。类型不兼容。
    • @Samuel 这意味着带有注释的东西不是方法。也许您不小心注释了返回类型?这将解释您遇到的问题。
    • 你应该转换元素,而不是类型:(ExecutableElement)annotatedElement
    【解决方案2】:
    ExecutableElement method = ...
    

    可以通过

    获取方法的返回类型
    TypeMirror returnType = mehod.asType()
    

    你可以通过

    获取方法的参数
    List<? extends VariableElement> parameters = method.getParameters();
    

    您可以通过

    获取参数的名称
    parameters.forEach(p -> {
                String name = p.getSimpleName().toString();
                TypeMirror type = p.asType();
       });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多