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