DROOLS如果其中一个条件不匹配,则停止评估

时间:2015-11-30 11:49:49

标签: java drools

我有以下规则:

when
 not FixedClient(service == null) and
 not FixedClient(service.statusCode == "CU") and
 $client : FixedClient(lastChargeDate > 3)
then
 ...

从日志看来,即使第一个条件返回true(即service为null),仍会评估其余条件,这会导致空指针异常。有没有办法优化条件,以便在满足错误条件时停止评估(类似于&&&和Java的工作方式)?

1 个答案:

答案 0 :(得分:1)

这是什么条件:

not FixedClient(service == null) and
not FixedClient(service.statusCode == "CU") and
$client: FixedClient(lastChargeDate > 3)

表示:“如果没有服务等于null的客户端,并且没有状态代码等于”CU“的客户端,并且如果有(一个或多个)客户端的上次收费日期大于3,则执行...“

模式前面的运算符not负存在量词,在(逻辑)中由表示。这不能与逻辑not中的逻辑运算符¬相混淆,或者在Java中!。在日常用语中,可以说,例如,“没有红色汽车”,而不是说“有一辆颜色不等于红色的汽车”。

像这样修改你的条件:

when
  $client: FixedClient(service != null &&
                       service.statusCode != "CU",
                       lastChargeDate > 3)
then

找到一个客户服务器,该客户服务器既不是null也不是CU,最后一个充电日期大于3。