流口水规则仅指定为父而不是为其子女开火

时间:2016-09-19 00:53:09

标签: drools drools-guvnor drools-planner

我有两个java对象(假设父和子......扩展父对象)。但是我只需要为父对象指定规则触发。

例如:

when 
    $raw : Parent()
then
    System.out.println(" Parent")
end
----
when 
    $raw : Child()
then
    System.out.println(" Child")
end

如果我尝试将子对象注入事实,那么两者都会触发。我不能使用不是孩子()bz我有很多孩子。谢谢

祝你好运, Nipuna。

1 个答案:

答案 0 :(得分:0)

首先,我要说,区分Parent对象与其任何子类的必要性很可能是一个设计缺陷。如果您需要仅适用于Parent而不适用于其任何子类的规则,则表明Parent将与其子项并行进行处理。要解决此问题,请不要插入父对象,而是创建另一个子类

class ChildWithoutAdditionalProperties extends Parent {
}

并插入此类的对象。

其次,not Child()Child之外的任何其他类的对象不匹配,因为您的评论“我无法使用not Child()”似乎表明:它将匹配缺少任何儿童事实。

要测试某个对象是否属于某个类,您可以比较该对象的类:

rule "parent"
when
    $e: Parent( $e.getClass == Parent.class )
then
    System.out.println( "found Parent" );
end