10

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

public class MyClassGenerated extends MyMapper<OtherClass>{

}

我的生成代码:

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

1 回答 1

22

该类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()的文档或JavaPoet GitHub 页面的“$T for Types”部分。

于 2016-05-04T17:44:53.717 回答