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