JCodeModel:具有特殊 class 类型的属性和列表
JCodeModel: Attributes and Lists with special class-types
我今天开始使用 JCodeModel。
我想向我的 JDefinedClass 添加除 int、String、boolean 等其他类型的属性。 JCodeModel 构建的最终 Java 代码应如下所示:
public Class Team {
private int teamID;
private String teamName;
private Coach coach;
}
如何使用 JCodeModel 添加具有 class 类型 "Coach" 的 Field 教练?
jClass.field(JMod.PRIVATE, *???*, coach);
第二个问题是:
如何添加例如
ArrayList<Coach> coachList;
到我的属性列表?
谢谢
您可以简单地生成 Coach
class,并将其作为参数传递给 field(...)
方法。请注意,此方法接受 JType
作为第二个参数,并且 JClass
和 JDefinedClass
都继承自 JType
.
对于ArrayList
,你可以通过在定义的class上调用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("."));
}
}
它生成(空)class Coach
,class Team
为
import java.util.ArrayList;
public class Team {
private Coach coach;
private ArrayList<Coach> coaches;
}
(我希望这个答案足够了。虽然链接将来可能会消失:我发现这些教程非常有助于初步掌握 CodeModel 编辑:链接已更新,见下文 : CodeModel Basics, CodeModel Inheritance)
编辑: 确实,链接已失效。它们只应被视为 "supplemental",或作为进一步阅读的指针。主要信息(关于原始问题)应包含在此答案中。我没有其他教程的推荐(除了每个人都可以通过基本网络搜索找到的内容),但现在,我用网络存档中的最新快照替换了链接。
我今天开始使用 JCodeModel。 我想向我的 JDefinedClass 添加除 int、String、boolean 等其他类型的属性。 JCodeModel 构建的最终 Java 代码应如下所示:
public Class Team {
private int teamID;
private String teamName;
private Coach coach;
}
如何使用 JCodeModel 添加具有 class 类型 "Coach" 的 Field 教练?
jClass.field(JMod.PRIVATE, *???*, coach);
第二个问题是: 如何添加例如
ArrayList<Coach> coachList;
到我的属性列表? 谢谢
您可以简单地生成 Coach
class,并将其作为参数传递给 field(...)
方法。请注意,此方法接受 JType
作为第二个参数,并且 JClass
和 JDefinedClass
都继承自 JType
.
对于ArrayList
,你可以通过在定义的class上调用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("."));
}
}
它生成(空)class Coach
,class Team
为
import java.util.ArrayList;
public class Team {
private Coach coach;
private ArrayList<Coach> coaches;
}
(我希望这个答案足够了。虽然链接将来可能会消失:我发现这些教程非常有助于初步掌握 CodeModel 编辑:链接已更新,见下文 : CodeModel Basics, CodeModel Inheritance)
编辑: 确实,链接已失效。它们只应被视为 "supplemental",或作为进一步阅读的指针。主要信息(关于原始问题)应包含在此答案中。我没有其他教程的推荐(除了每个人都可以通过基本网络搜索找到的内容),但现在,我用网络存档中的最新快照替换了链接。