如何使用JavaPoet生成调用超类构造函数的构造函数

时间:2016-09-01 11:41:22

标签: java annotation-processing javapoet annotation-processor

我想生成一个使用JavaPoet扩展其他类的类。

例如我有这个课程:

@MyAnnotation
public class ClassA {
  public ClassA(String paramA, int paramB) {
     // some code
  }
} 

我想生成像这样的新类:

public class Generated_ClassA extends ClassA {
  public Generated_ClassA (String paramA, int paramB) {
     super(paramA, paramB);
  }
} 

但是,我没有在JavaPoet中看到任何现成的API来创建调用超类构造函数的构造函数。如何做到这一点以及最佳做法是什么?

1 个答案:

答案 0 :(得分:2)

您可以使用MethodSpec.Builder#addStatement

来完成此操作
MethodSpec.constructorBuilder()
          .addModifiers(Modifier.PUBLIC)
          .addParameter(String.class, "paramA")
          .addParameter(Integer.TYPE, "paramB")
          .addStatement("super(paramA, paramB)")
          .build();

您还可以使用MethodSpec.Builder#addCode并使用CodeBlock.Builder#addStatement构建相同的代码,但遗憾的是 AFAIK 没有可用于调用super的特定构建器。