基于Java枚举应用基于规则的分组
(此问题不需要了解XStream本身) 下面是使用XStream-基于Java枚举应用基于规则的分组,java,enums,overriding,grouping,xstream,Java,Enums,Overriding,Grouping,Xstream,(此问题不需要了解XStream本身) 下面是使用XStream- <Root> <Entity> <Action>...</Action> <Type>...</Type> <Data>...</Data> </Entity> </Root> ... ... ... 由于数据节点是多态的,因此它可以映射到任意一个bean,即Data
<Root>
<Entity>
<Action>...</Action>
<Type>...</Type>
<Data>...</Data>
</Entity>
</Root>
...
...
...
由于数据节点是多态的,因此它可以映射到任意一个bean,即DataABC、DataPQR、DataXYZ等:
<Data>
<A>aaa</A>
<B>bbb</B>
<C>ccc</C>
</Data>
or
<Data>
<P>ppp</P>
<Q>qqq</Q>
<R>rrr</R>
</Data>
or
<Data>
<X>xxx</X>
<Y>yyy</Y>
<Z>zzz</Z>
</Data>
aaa
bbb
ccc
或
购买力平价
qqq
存款准备金率
或
xxx
yyy
zzz
xstream有助于umarshaling bean,如:
Root=xstream.fromXML(rootXML)
有一个配置器接口,它通过将节的xml标记映射到实际的pojo bean来帮助配置XStream对象:
interface Configurer<T> {
public void configure(T t);
}
enum ConfigurersLib implements Configurer<XStream> {
ROOT("Root", Root.class),
ENTITY("Entity", Entity.class),
TYPE("Type", Type.class),
ACTION("Action", Action.class),
// polymorphic data tag configurers
DATA_ABC("Data", DataABC.class),
DATA_PQR("Data", DataPQR.class),
DATA_XYZ("Data", DataXYZ.class),
;
@Override
public void configure(XStream xs){
xs.alias(this.xmlTag, this.classType);
}
//constructor
private ConfigurersLib(String tag, Class classType){
this.xmlTag = tag;
this.classType = classType;
}
...
}
接口配置器{
公共空间配置(T);
}
枚举配置器库实现配置器{
ROOT(“ROOT”,ROOT.class),
实体(“实体”,实体类),
类型(“类型”,类型.class),
动作(“动作”,动作类),
//多态数据标记配置器
数据_ABC(“数据”,DataABC.class),
数据认证(“数据”,数据认证等级),
数据_XYZ(“数据”,DataXYZ.class),
;
@凌驾
公共无效配置(XStream xs){
别名(this.xmlTag,this.classType);
}
//建造师
私有配置库(字符串标记,类类型){
this.xmlTag=tag;
this.classType=classType;
}
...
}
对于给定的请求类型-我可以将一些配置程序分组,形成责任链,其中一个链是枚举集:
如果Type=ABC,则调用链--{ROOT,ENTITY,ACTION,Type,DATA_ABC}
如果Type=PQR,则调用链--{ROOT,ENTITY,ACTION,Type,DATA_PQR}
如果Type=XYZ,则调用链--{ROOT,ENTITY,ACTION,Type,DATA_XYZ}
上图比较简单,但不幸的是,这些配置器数量较多(50-100+),因此在创建此类组时可能会丢失一些配置器枚举元素。这也可能降低一些清晰度
问题
确保以下各项的最佳方式(模式/技巧/标准)是什么