【问题标题】:Castor Hashtable polymorphismCastor Hashtable 多态性
【发布时间】:2013-08-12 20:43:24
【问题描述】:

美好的一天

我正在尝试使用 castor 构造一个具有多个抽象类实现的 HashTable。 这是父“配置”

<class name="com.Config">
    <map-to xml="config" />
    <field name="rulesMap" collection="hashtable">
        <bind-xml  auto-naming="deriveByClass"  >
            <class name="org.exolab.castor.mapping.MapItem">
                <field name="key" type="java.lang.String">
                    <bind-xml name="name" node="attribute" />
                </field>
                <field name="value" type=com.Rule">

                </field>
            </class>
        </bind-xml>
    </field>
</class>

'com.Rule' 是一个抽象类,并且 在一天结束时,我想要一个看起来像这样的 xml 结构

<config>
<rule-impl1 name="ruleType1Instance1" ruleField="field"  />
    <rule-impl2 name="ruleType2Instance2" ruleField="field" ruleImpl2Field1="..." />
</config>

【问题讨论】:

    标签: collections castor


    【解决方案1】:

    我不确定这里是否有足够的细节或格式正确的问题来给出准确的答案,但我正在做一些非常相似的事情并且遇到了一些障碍。以为我会提供我的2美分。我不像其他一些 XML 框架那样熟悉 Castor,在我的情况下,Castor 正在执行自动编组/解组,而不是我们手动编写代码来决定何时完成。如果我们手动执行该部分,我认为我们将能够做出决定,将其解组为扩展抽象类的特定类。

    除去我所有的免责声明,你可以做什么。

    **如果您可以在请求/响应中添加一个字段,则创建如下内容:

    public class RuleContainer {
     private RuleType ruleType;  // possibly build enum or other non-java equivalent
     private RuleImpl1 ruleImpl1;
     private RuleImpl2 ruleImpl2;
     private RuleImpl...N ruleImpl...N;
     // getters & setters, etc
    }
    

    然后你的表的值变成了

    <field name="value" type="com.RuleContainer"></field>
    

    并包含您的 RuleContainer 映射

     <class name="com.RuleContainer">
       <field name="ruleType" type="com.RuleType"
       <field name="ruleImpl1" type="com.RuleImpl1">
       <field name="ruleImpl2" type="com.RuleImpl2">
       <field name="ruleImpl...N" type="com.RuleImpl...N">
     </class>
    

    还包括每个实现的映射,无论它们看起来如何。就我而言,我已经将每个实现映射分解为一个单独的文件并使用了

    <include href="" /> 
    

    标记以在父文件中包含那些无关的映射。

    所有这些都使您可以使用 RuleType 字段来了解 RuleContainer 中的哪个规则是有效的(其余的将为 null,因为 Castor 默认为 required="false")。使用规则的每个实现的逻辑很容易从那里编写。 希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多