您可以简单地生成Coach
类,并将其作为参数传递给field(...)
方法。请注意,此方法接受 aJType
作为第二个参数,并且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 基础知识,CodeModel 继承)
编辑:确实,链接死了。它们只应被视为“补充”,或作为进一步阅读的指针。主要信息(关于原始问题)应包含在此答案中。我没有推荐其他教程(除了每个人都可以通过基本的网络搜索找到的教程),但现在,我将链接替换为来自网络存档的最新快照。