Javapoet суперкласс универсальный
Кто-нибудь знает, как я могу сделать следующее с помощью javapoet
public class MyClassGenerated extends MyMapper<OtherClass>{
}
Мой код поколения:
TypeSpec generateClass() {
return classBuilder("MyClassGenerated")
.addModifiers(PUBLIC)
.superclass(???????????????)
.build();
}
1 ответ
Решение
ParameterizedTypeName
Класс позволяет указать аргументы универсального типа при объявлении суперкласса. Например, если ваш MyClassGenerated
класс является подклассом MyMapper
класс, вы можете установить параметр общего типа MyMapper
вот так:
TypeSpec classSpec = classBuilder("MyClassGenerated")
.addModifiers(PUBLIC)
.superclass(ParameterizedTypeName.get(ClassName.get(MyMapper.class),
ClassName.get(OtherClass.class)))
.build();
Это создаст TypeSpec
объект, эквивалентный следующему классу:
public class MyClassGenerated extends MyMapper<OtherClass> { }
Хотя это и не указано в вопросе, обратите внимание, что вы можете установить любое количество аргументов универсального типа, просто добавив их в правильном порядке к ParameterizedTypeName.get
вызов:
ParameterizedTypeName.get(
ClassName.get(SuperClass.class),
ClassName.get(TypeArgumentA.class),
ClassName.get(TypeArgumentB.class),
ClassName.get(TypeArgumentC.class)
); // equivalent to SuperClass<TypeArgumentA, TypeArgumentB, TypeArgumentC>
Для получения дополнительной информации о ParameterizedTypeName.get()
метод, смотрите здесь документацию или раздел "$T для типов" на странице GitHub JavaPoet.