Drools 规则 - 针对 bool 字段的写入规则,名称以 "is"开头

标签 drools

在 drools 规则中,想要测试 bool 字段 isValid 的值(注意:字段名称以“is”开头)。出现以下错误:

Unable to create Field Extractor for 'isValid' of '[ClassObjectType class=domain.SpecialObject]' in rule 'Test boolean stuff' : [Rule name='Test boolean stuff'] Exception in thread "main" java.lang.IllegalArgumentException: Could not parse drl files.

但是,规则中的另一个 bool 字段“solid”工作正常。

Environment: Drools version - 5.1.1, dialect=mvel

<Drl file>
import deshaw.compliance.regsys.dep.domain.SpecialObject;
dialect "mvel"
rule "Test boolean stuff"
no-loop
  when
    $obj: SpecialObject(isValid == true)  // -->Problematic guy
    //$obj: SpecialObject(solid == true)  // -->This works fine
then
   System.out.println("[SplObject]:Class=" + $obj.class + ";;;obj=" + $obj);
end

<domain object>
public class SpecialObject {

private boolean isValid;
private boolean solid;

public boolean isValid() {
    return isValid;
}

public void setValid(boolean isValid) {
    this.isValid = isValid;
}

public boolean isSolid() {
    return solid;
}

public void setSolid(boolean solid) {
    this.solid = solid;
}

}

注意:该类属于第三方库,因此我无法更改“isValid”字段的名称

最佳答案

尝试

when
  $obj : SpecialObject( valid == true )
then
   ...

由于属性的访问器是 isValid,因此您应该在 mvel 中将其称为 valid。另一种选择是使用带括号的完整方法名称。

字段名称本身无关紧要,但如果作者遵守命名标准会更好。

关于Drools 规则 - 针对 bool 字段的写入规则,名称以 "is"开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18598431/

相关文章:

java - 使用 insertLogical 时停止进入循环

java - 无法为类 'org.drools.builder.KnowledgeBuilderFactoryService' 实例化服务

java - 如何使用 OptaPlanner 和 Spring Boot 降低 SoftScore?

java - 如何在多个对象上正确触发 Drools 规则?

java - 流口水规则实现

java - 在 Drools 中传递多个对象不起作用

java - Drools 规则格式仅触发一次

java - 在 Drools 6.5.0 和 Drools 7.0.0 中序列化后,时间运算符失败

流口水的表现

java - 为什么求解后PlanningVariable的值没有变化? #OptaPlanner