Javapoet超类通用

时间:2016-05-04 13:02:11

标签: java android generics javapoet

任何人都知道如何使用javapoet

执行以下操作
public class MyClassGenerated extends MyMapper<OtherClass>{

}

我的代码:

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

1 个答案:

答案 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”部分。