Javapoet 超类泛型

Javapoet superclass generic

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

public class MyClassGenerated extends MyMapper<OtherClass>{

}

我的生成代码:

TypeSpec generateClass() {
    return classBuilder("MyClassGenerated")
         .addModifiers(PUBLIC)
         .superclass(???????????????)
         .build();
}

ParameterizedTypeName class 允许您在声明超级 class 时指定泛型类型参数。例如,如果您的 MyClassGenerated class 是 MyMapper class 的子 class,您可以设置 MyMapper 的通用类型参数,例如所以:

TypeSpec classSpec = classBuilder("MyClassGenerated")
     .addModifiers(PUBLIC)
     .superclass(ParameterizedTypeName.get(ClassName.get(MyMapper.class),  
                                           ClassName.get(OtherClass.class)))
     .build();

这将生成一个 TypeSpec 对象,它等同于以下 class:

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 or the "$T for Types" section of the JavaPoet GitHub page