1

我在多个类中有静态方法,为了方便起见,我想将它们合并到一个新的、生成的类中。

我正在使用注释处理和 javapoet。

我的问题:从注释处理中,我得到静态方法作为 ExecutableElements 的列表。

对于 JavaPoet,我需要创建它们的 MethodSpecs。我在尝试:

 public MethodSpec apply(@Nullable ExecutableElement input) {
  TypeMirror returnType = input.getReturnType();

  return MethodSpec.methodBuilder(THE_METHOD_NAME)
    .addModifiers(Modifier.PUBLIC, Modifier.STATIC)
    .returns(THE_RETURN_TYPE)
    .addParameter(EVERY_PARAMETER_WITH_TYPE_AND_NAME)
    .addStatement("$T.$S($S)", THE_ENCLOSING_CLASS, THE_METHOD_NAME, THE_PARAMETERS)
    .build();
}

我的问题:如何获取 CAPS 中缺失单词的类型值?似乎 ExecutableElements 的行为不像反射 api。

4

1 回答 1

0

这可能是一个示意图代码,您可以使用它来帮助您入门:

THE_METHOD_NAME->input.getSimpleName()

THE_RETURN_TYPE->input.getReturnType()

THE_ENCLOSING_CLASS->input.getEnclosingElement().getSimpleName()

EVERY_PARAMETER_WITH_TYPE_AND_NAME->

for (VariableElement ve: executableElement.getParameters()){
   System.out.println("Param name: " + ve.getSimpleName());
   // note here that the type can be generic, so you'll need to parse 
   // the generic part and use to build a javapoet 
   // ParameterizedTypeName
   System.out.println("Param type: " + ve.asType());
}
于 2016-10-27T23:29:53.157 回答