我希望这不是太具体。
我创建了一个 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;
}
我想使用另一种方法(编辑:而不是开关/案例),我正在考虑枚举,但我并不完全在那里。我也不想使用反射。