0

有什么方法可以让 Drools 处理字符串、整数比较而无需手动进行类型转换?

我在将字符串与规则中的整数进行比较时遇到问题。该规则可以简化为以下字段,其中字段只是一个Map<String, String>.

rule "Test Rule"
    when
        MapTest(fields["a"] != null, fields["a"] == 10)
    then
        System.out.println( "test succeeded" );
end

问题是,给定这条规则,即使 a = "10",结果也不会被触发。根据第 4.8.3.3.3 节“强制总是支持字段类型而不是值类型”的文档。所以这条规则似乎应该将 10 强制为“10”,然后这个比较应该返回 true,但事实并非如此。

如果将 10 更改为“10”,则规则成功。此外,如果我做 Integer.parseInt(fields["a"]) 规则成功。

更有趣的部分是,如果我将运算符更改为 > 或 < 并适当地更改 fields["a"] 的值,则规则仍然成功!这是因为 > 和 < 在技术上不是字符串上的有效运算符,因此两个操作数被转换为数值并进行比较?

4

1 回答 1

0

Drools 似乎在 5.3 和 5.4 版本之间处理类型强制的方式不同。Wolfgang 在Drools 用户论坛上给出了一个很好的例子来说明差异。

对我来说,这似乎是 5.3 版中的一个错误,因为文档说应该尝试强制,但根据示例它不是(或者至少它没有正确完成)。最后,我仍然不知道 > 和 < 运算符是如何工作的,但至少我收集了足够的信息来知道在我的情况下我必须将字符串解析为数值。

于 2012-07-06T18:28:06.157 回答