有什么方法可以让 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"] 的值,则规则仍然成功!这是因为 > 和 < 在技术上不是字符串上的有效运算符,因此两个操作数被转换为数值并进行比较?