JCodeModel:具有特殊 class 类型的属性和列表

JCodeModel: Attributes and Lists with special class-types

我今天开始使用 JCodeModel。 我想向我的 JDefinedClass 添加除 int、String、boolean 等其他类型的属性。 JCodeModel 构建的最终 Java 代码应如下所示:

public Class Team {
    private int teamID;
    private String teamName;
    private Coach coach;
}

如何使用 JCodeModel 添加具有 class 类型 "Coach" 的 Field 教练?

jClass.field(JMod.PRIVATE, *???*, coach);

第二个问题是: 如何添加例如

ArrayList<Coach> coachList;

到我的属性列表? 谢谢

您可以简单地生成 Coach class,并将其作为参数传递给 field(...) 方法。请注意,此方法接受 JType 作为第二个参数,并且 JClassJDefinedClass 都继承自 JType.

对于ArrayList,你可以通过在定义的class上调用narrow来定义类型参数,传入另一个JType。 (这甚至适用于类型参数——也就是说,您甚至可以调用 c.narrow(cm.ref("T")) 来给它一个名为 T 的类型参数)。

这是一个例子:

import java.io.File;
import java.util.ArrayList;

import com.sun.codemodel.JClass;
import com.sun.codemodel.JCodeModel;
import com.sun.codemodel.JDefinedClass;
import com.sun.codemodel.JMod;


public class CodeModelTest
{
    public static void main(String[] args) throws Exception
    {
        JCodeModel codeModel = new JCodeModel();


        JDefinedClass teamClass = codeModel._class("Team");
        JDefinedClass coachClass = codeModel._class("Coach");
        teamClass.field(JMod.PRIVATE, coachClass, "coach");

        JClass arrayListClass = codeModel.ref(ArrayList.class);
        JClass arrayListOfCoachClass = arrayListClass.narrow(coachClass);
        teamClass.field(JMod.PRIVATE, arrayListOfCoachClass, "coaches");

        codeModel.build(new File("."));
    }

}

它生成(空)class Coach,class Team

import java.util.ArrayList;

public class Team {

    private Coach coach;
    private ArrayList<Coach> coaches;

}

(我希望这个答案足够了。虽然链接将来可能会消失:我发现这些教程非常有助于初步掌握 CodeModel 编辑:链接已更新,见下文 : CodeModel Basics, CodeModel Inheritance)


编辑: 确实,链接已失效。它们只应被视为 "supplemental",或作为进一步阅读的指针。主要信息(关于原始问题)应包含在此答案中。我没有其他教程的推荐(除了每个人都可以通过基本网络搜索找到的内容),但现在,我用网络存档中的最新快照替换了链接。