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

时间:2015-02-22 13:32:24

标签: jcodemodel

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

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

如何使用班级类型添加Field教练"教练"使用JCodeModel?

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

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

ArrayList<Coach> coachList;

到我的属性列表? 感谢

1 个答案:

答案 0 :(得分:1)

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

对于ArrayList,您可以通过在已定义的类上调用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("."));
    }

}

它生成(空)类Coach,并将类Team生成为

import java.util.ArrayList;

public class Team {

    private Coach coach;
    private ArrayList<Coach> coaches;

}

(我希望这个答案已经足够了。虽然链接可能会在将来消失:我发现这些教程非常有助于第一次抓住CodeModel 编辑:链接更新,见下文CodeModel BasicsCodeModel Inheritance


编辑:确实,链接已经死亡。它们应该只被视为“补充”,或作为进一步阅读的指针。主要信息(关于原始问题)应该包含在这个答案中。我没有其他教程的建议(除了每个人都可以通过基本的网络搜索找到的内容),但是现在,我用网络档案中的最新快照替换了这些链接。