我使用sun-codemodel来生成代码。我对泛型有问题。我知道要生成像这样的东西
LinkedList<String>,我需要使用
JType jtype = jCodeModel.ref("LinkedList").narrow(jCodeModel.ref("String"));但是,如何为多个泛型类型创建更通用的内容?
HashMap<String,Integer>我想在循环中这样做,以便它支持自定义类中的任意数量的参数,但代码如下:
for(String name: names()){
returnTypeClass = jCodeModel.ref(name).narrow(jCodeModel.ref(name));
}输出如下所示:
JNarrowedClass(JCodeModel$JReferencedClass(HashMap)<Integer>)<String>发布于 2013-07-24 09:56:50
我对CodeModel并不熟悉,但是看一下API文档,似乎有一个变量重载:narrow(JClass...)。假设这用于解析多个类型参数。因此,在使用HashMap<String, Integer>的情况下,您将执行以下操作:
JType jtype = jCodeModel.ref("HashMap").narrow(
jCodeModel.ref("String"),
jCodeModel.ref("Integer")
);并将其推广到您的循环中:
Collection<JClass> typeArgClasses = new ArrayList<>();
for (String name : names()) {
typeArgClasses.add(jCodeModel.ref(name));
}
JType jtype = jCodeModel
.ref(typeName)
.narrow(typeArgClasses.toArray(new JClass[typeArgClasses.size()]);https://stackoverflow.com/questions/17806129
复制相似问题