java - 代码模型 : generic types generation in a loop . 窄()?

标签 java generics code-generation sun-codemodel

我正在使用 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>

最佳答案

我不熟悉 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()]);

关于java - 代码模型 : generic types generation in a loop . 窄()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17806129/

相关文章:

java - 在 wordpress post 中获取异常

Java正则表达式查找数字

ios - 转换作为数组的泛型类型时出现问题

scala - 处理宏注释时无法访问父级成员

matlab - 在以编程方式生成代码之前如何关闭检查模型

java - 如何使用 Apache POI 旋转电子表格单元格中的文本?

Java ArrayList.removeAll()

c# - 如何比较T与T?

java - Java 中的级联泛型类型声明

c++ - 为什么模板编译这么慢?