Javapoet超类通用

Marco Giovanni:

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

public class MyClassGenerated extends MyMapper<OtherClass>{

}

我的生成代码:

TypeSpec generateClass() {
    return classBuilder("MyClassGenerated")
         .addModifiers(PUBLIC)
         .superclass(???????????????)
         .build();
}
埃尔霍斯:

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”部分

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章