我正在处理扩展 Drools 中的公共基类的消息,并且对于一种类型,我需要为规则条件中的变量定义调用不同的 getter。对于异常和所有其他类,值都是int但 getter 名称不同。否则规则完全相同,这就是为什么我试图在一个规则中解决它。
public class ClassBase {
private int baseVal = 42;
public int getBaseVal() {
return baseVal;
}
}
public class ClassA extends ClassBase {
private int myVal = 42;
public int getAval() {
return myVal;
}
}
public class ClassB extends ClassBase {
private int myVal = 42;
public int getBval() {
return myVal;
}
}
public class SomeClassWithInt {
private int comp = 42;
public int getComp() {
return comp;
}
}
我的目标是使用该变量来查找其他事实并在结果中使用它。
rule "different getter depending on class type"
when
$base: ClassBase()
( ClassB( this == $base, $value: bval ) or
not ClassB( this == $base, $value: baseVal ))
$some: SomeClassWithInt( comp == $value )
then
System.out.println($value);
end
现在,如果我添加一个ClassA、一个ClassB和一个SomeClassWithInt事实并调用fireAllRules()这个规则不会触发。如果我用ClassA(...)替换not classB(...)部分,它就像我想要的那样工作。
谁能告诉我为什么not版本不起作用?