任何人都知道如何使用javapoet
执行以下操作public class MyClassGenerated extends MyMapper<OtherClass>{
}
我的代码:
TypeSpec generateClass() {
return classBuilder("MyClassGenerated")
.addModifiers(PUBLIC)
.superclass(???????????????)
.build();
}
答案 0 :(得分:16)
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()
方法的详细信息,请参阅文档here或JavaPoet GitHub page的“$ T for Types”部分。