Drools规则-针对布尔字段编写规则,名称以“开始”;是";

Drools规则-针对布尔字段编写规则,名称以“开始”;是";,drools,Drools,在drools规则中,要测试布尔字段的值是否有效(注意:字段名以“is”开头)。获取以下错误: 无法为规则“Test boolean stuff':[rule name='Test boolean stuff']中“[ClassObjectType class=domain.SpecialObject]”的“isValid”创建字段提取器 线程“main”java.lang.IllegalArgumentException中出现异常:无法分析drl文件 但是,规则中的另一个布尔字段“solid”

在drools规则中,要测试布尔字段的值是否有效(注意:字段名以“is”开头)。获取以下错误:

无法为规则“Test boolean stuff':[rule name='Test boolean stuff']中“[ClassObjectType class=domain.SpecialObject]”的“isValid”创建字段提取器 线程“main”java.lang.IllegalArgumentException中出现异常:无法分析drl文件

但是,规则中的另一个布尔字段“solid”可以正常工作

环境:Drools版本-5.1.1,方言=mvel


导入deshaw.compliance.regsys.dep.domain.SpecialObject;
方言“mvel”
规则“测试布尔值”
无回路
什么时候
$obj:SpecialObject(isValid==true)/-->有问题的家伙
//$obj:SpecialObject(solid==true)/-->
然后
System.out.println(“[SplObject]:Class=“+$obj.Class+”;;obj=“+$obj”);
结束
公共类特殊对象{
私有布尔值是有效的;
私有布尔实数;
公共布尔值isValid(){
返回有效;
}
public void setValid(布尔值isValid){
this.isValid=isValid;
}
公共布尔值isSolid(){
返回固体;
}
公共void集合实体(布尔实体){
这个。固体=固体;
}
}
注意:该类属于第三方库,因此我无法更改“isValid”字段的名称

when
  $obj : SpecialObject( valid == true )
then
   ...
由于属性的访问器是
isValid
,因此您应该从mvel中将其称为
valid
。另一种选择是使用带括号的完整方法名


字段本身的名称是不相关的,尽管如果作者遵守命名标准会更好。

Regd使用访问器的另一种替代方法是valid(),会导致解析错误>[8,36]:[ERR 101]行8:36在模式SpecialObject>[8,38]:[ERR 102]中的规则“测试布尔值”(Test boolean stuff)中输入时没有可行的替代方法第8行:38模式SpecialObject中规则“测试布尔值”中输入“==”预期“')”不匹配
when
  $obj : SpecialObject( valid == true )
then
   ...