首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >代码模型:在循环中生成泛型类型.narrow()?

代码模型:在循环中生成泛型类型.narrow()?
EN

Stack Overflow用户
提问于 2013-07-23 17:18:10
回答 1查看 1.6K关注 0票数 2

我使用sun-codemodel来生成代码。我对泛型有问题。我知道要生成像这样的东西

代码语言:javascript
复制
LinkedList<String>,

我需要使用

代码语言:javascript
复制
JType jtype = jCodeModel.ref("LinkedList").narrow(jCodeModel.ref("String"));

但是,如何为多个泛型类型创建更通用的内容?

代码语言:javascript
复制
HashMap<String,Integer>

我想在循环中这样做,以便它支持自定义类中的任意数量的参数,但代码如下:

代码语言:javascript
复制
for(String name: names()){
  returnTypeClass = jCodeModel.ref(name).narrow(jCodeModel.ref(name));
}

输出如下所示:

代码语言:javascript
复制
JNarrowedClass(JCodeModel$JReferencedClass(HashMap)<Integer>)<String>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-24 09:56:50

我对CodeModel并不熟悉,但是看一下API文档,似乎有一个变量重载:narrow(JClass...)。假设这用于解析多个类型参数。因此,在使用HashMap<String, Integer>的情况下,您将执行以下操作:

代码语言:javascript
复制
JType jtype = jCodeModel.ref("HashMap").narrow(
        jCodeModel.ref("String"),
        jCodeModel.ref("Integer")
);

并将其推广到您的循环中:

代码语言:javascript
复制
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()]);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17806129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档