【发布时间】:2012-03-14 14:09:33
【问题描述】:
我希望这不是太具体。
我创建了一个 XML Schema,我用 XJC 编译它来获取类。 XML 基本上代表表单的一些元素(如文本字段、标签等)。 摘录如下:
<gruppoOggetti id="string" nome="string">
<oggetto xsi:type="labelType" etichetta="string" id="string" obbligatorio="false" />
<oggetto xsi:type="listaOpzioni" id="string" obbligatorio="1">
<opzione id="string">string</opzione>
</oggetto>
<oggetto xsi:type="imageType" etichetta="string" id="string" obbligatorio="0" />
</gruppoOggetti>
如您所见,对象的类型是从属性 xsi:type 定义的,所以当我使用 jaxb 解组 xml 时,它会自动建立正确的类。
现在的问题: 我正在实现一个抽象工厂来创建对象,所以基本上我必须根据 xml 说我必须创建的对象来调用我工厂的不同方法。 我现在使用的不太令人满意的方法是:
public OggettoBase creaOggetto(Factory f, OggettoType oggetto)
{
String tipo = oggetto.getClass().getSimpleName().toString();
OggettoBase ret = null;
switch(tipo)
{
case "CheckBoxType": ret = f.createCheckbox(); break;
case "ImageType":ret = f.createImage(); break;
case "LabelType":ret = f.createLabel(); break;
case "LinkType": ret = f.createLink(); break;
case "ListaOpzioni": ret = f.createLista(); break;
case "PasswordType": ret = f.createPassword(); break;
case "RadiobuttonType": ret = f.createRadiobutton(); break;
case "TextareaType": ret = f.createTextarea(); break;
case "TextfieldType": ret = f.createTextfield(); break;
default : System.out.println("Il tipo: "+tipo+" non esiste");
}
return ret;
}
我想使用其他方法(编辑:而不是 switch/case),我正在考虑枚举,但我并不完全在那里。我也不想使用反射。
【问题讨论】:
标签: java xml xsd abstract-factory