Как создать конструктор, который вызывает конструктор суперкласса, используя JavaPoet

Я хочу создать класс, который расширяет другой класс, используя 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 для создания конструкторов, вызывающих конструкторы суперкласса. Как это можно сделать и каковы лучшие практики?


person radzio    schedule 01.09.2016    source источник


Ответы (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 нет специальных сборщиков.

person vsminkov    schedule 01.09.2016