首先,我想向您展示我想要实现的目标。我想从如下所示的类中生成一个 XML 文件:
<config>
<criteria name="criteriaName" defaultValue="0">
<item value="1">
<criteria name="criteriaName2" defaultValue="">
<item value="foo">
</item>
<item value="bar">
</item>
</criteria>
</item>
<item value="2">
</item>
</criteria>
<criteria name="criteriaName3" defaultValue="">
<item value="foo">
</item>
</criteria>
</config>
概括:
- Criteria 有一个名称和一个默认值(可以是 String、int 或 double)和 x 项作为子项。
- 一个 Item 有一个值,该值必须与父条件 defaultValue 的类型相同。
- 一个项目还可以包含另一个条件。条件中 defaultValue 的类型独立于父母(项目)类型
例如:
criteria (type int)
item (type int)
criteria(type String)
item(type String)
我还需要以类的形式使用此模型,因为稍后我想对其进行一些验证。
现在我在一个特定的点上挣扎,让我先向你展示我的课程:
配置:
@XmlAccessorType(value=XmlAccessType.FIELD)
@XmlRootElement(name="config")
public class Config {
@XmlElement(name = "criteria")
private List<Criteria> criteriaList = new ArrayList<Criteria>();
/*getters and setters*/
}
标准:
@XmlAccessorType(value=XmlAccessType.FIELD)
@XmlRootElement(name="criteria")
public class Criteria<T> {
@XmlAttribute
private T key;
@XmlAttribute
private String display;
@XmlAttribute
private T defaultValue;
private List<Item<T>> items = new ArrayList<Item<T>>();
public T getKey() {
return key;
}
/*getters and setters*/
}
物品:
@XmlAccessorType(value=XmlAccessType.FIELD)
@XmlRootElement(name="item")
public class Item<T>{
@XmlAttribute
protected T key;
@XmlAttribute
protected String display;
@XmlElement
protected List<Criteria<T>> criteria = new ArrayList<Criteria<T>>();
/*getters and setters*/
}
有了它,我可以制作一个特定类型的标准,其中包含相同类型的项目。
现在我想在项目下插入一个标准,它的类型与项目不同,但这是不可能的:
Config config = new Config();
Criteria<Integer> criteria = new Criteria<Integer>();
Item<Integer> item = new Item<Integer>();
Criteria<String> subCriteria = new Criteria<String>();
//this obviously doesn't work
item.getCriteria().add(subCriteria); //<--
criteria.getItems().add(item);
config.addCriteria(criteria);
我也尝试过类似这样的声明(在项目中):
@XmlElement
protected <U> List<Criteria<U>> criteria;
但这仅适用于方法,而不适用于属性。
任何人都可以帮忙吗?