任何人都知道如何使用javapoet执行以下操作

public class MyClassGenerated extends MyMapper<OtherClass>{

}

我的生成代码:
TypeSpec generateClass() {
    return classBuilder("MyClassGenerated")
         .addModifiers(PUBLIC)
         .superclass(???????????????)
         .build();
}

最佳答案

ParameterizedTypeName类允许您在声明父类(super class)时指定泛型类型参数。例如,如果您的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()方法的更多信息,请参见JavaPoet here的文档GitHub page“$ T for Types” 部分。

10-08 01:39