Правило Drool для указания запуска только для родителя, а не для его дочернего элемента

У меня есть два java-объекта (скажем, Parent и Child..child расширяет родительский элемент). Но мне нужно указать огонь правила только для родителя, а не для его дочернего элемента.

Ex:

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

Если я попытаюсь внедрить дочерний объект как факт, он сработает для обоих. Я не могу использовать not Child(), потому что у меня много детей. Спасибо.

С уважением, Нипуна.


person Nipuna Don Pranciscu    schedule 19.09.2016    source источник


Ответы (1)


Во-первых, позвольте мне сказать, что необходимость отличать объект Parent от любого из его подклассов, скорее всего, является конструктивным недостатком. Если вам нужны правила, которые применяются только к родительскому классу, а не к любому из его подклассов, это указывает на то, что родительский класс будет обрабатываться параллельно его дочерним элементам. Чтобы решить эту проблему, не вставляйте родительские объекты, а создайте другой подкласс.

class ChildWithoutAdditionalProperties extends Parent {
}

и вставить объекты этого класса.

Во-вторых, not Child() не соответствует объектам какого-либо другого класса, кроме Child, поскольку ваше замечание «Я не могу использовать не Child ()», по-видимому, указывает: оно будет соответствовать отсутствию какого-либо факта Child.

Чтобы проверить, что объект относится к определенному классу, вы можете сравнить класс этого объекта:

rule "parent"
when
    $e: Parent( $e.getClass == Parent.class )
then
    System.out.println( "found Parent" );
end
person laune    schedule 19.09.2016
comment
Это мне очень помогает. Спасибо.Принято. - person Nipuna Don Pranciscu; 01.11.2016