0

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

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

如何使用 JCodeModel 添加具有“教练”类类型的现场教练?

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

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

ArrayList<Coach> coachList;

到我的属性列表?谢谢

4

1 回答 1

1

您可以简单地生成Coach类,并将其作为参数传递给field(...)方法。请注意,此方法接受 aJType作为第二个参数,并且JClassJDefinedClass继承自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 基础知识CodeModel 继承


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

于 2015-02-22T15:29:33.237 回答