Вы можете просто сгенерировать класс 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)
EDIT: Действительно, умер ссылки. Их следует рассматривать только как «дополнительные» или как указатель для дальнейшего чтения. Основная информация (в отношении исходного вопроса) должна содержаться в этом ответе. У меня нет рекомендации для других учебных пособий (за исключением того, что все могут найти с помощью базовых веб-страниц), но на данный момент я заменил ссылки своими последними моментальными снимками из веб-архива.
Ссылки больше не работают. Любая замена, которую вы предлагаете? – iCrus
@iCrus У меня пока нет конкретного предложения, см. ** EDIT **, но обновили ссылки со своим последним снимком из веб-архива. Когда я нахожу хороший учебник для JCodeModel, я могу обновить ссылки снова, но в любом случае фрагменты кода, которые я опубликовал, должны все еще достаточно отвечать на исходный вопрос. – Marco13