【问题标题】:Javapoet superclass genericJavapoet 超类泛型
【发布时间】:2016-05-04 13:02:10
【问题描述】:

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

public class MyClassGenerated extends MyMapper<OtherClass>{

}

我的生成代码:

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

【问题讨论】:

    标签: java android generics javapoet


    【解决方案1】:

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

    【讨论】:

    • 看来ParameterizedTypeName.get(MyMapper.class, OtherClass.class)也可以。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多