【问题标题】:How to generate constructor that calls superclass constructor using JavaPoet如何使用 JavaPoet 生成调用超类构造函数的构造函数
【发布时间】:2016-09-01 11:41:22
【问题描述】:

我想生成一个使用 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 来创建调用超类构造函数的构造函数。如何做到这一点以及最佳实践是什么?

【问题讨论】:

    标签: java annotation-processing javapoet annotation-processor


    【解决方案1】:

    你可以使用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 的特定构建器。

    【讨论】:

      猜你喜欢
      • 2016-07-19
      • 2018-07-21
      • 1970-01-01
      • 1970-01-01
      • 2013-07-19
      • 2021-09-19
      • 2018-07-16
      • 2011-12-07
      相关资源
      最近更新 更多