Drools Number to String Eercion

时间:2012-06-19 02:42:33

标签: java drools

有没有办法让Drools处理String,Integer比较而无需手动进行类型转换?

我在将字符串与规则中的整数进行比较时遇到问题。该规则可以简化为以下内容,其中字段只是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”,然后这个比较应该返回true,但事实并非如此。

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

更有趣的部分是如果我将运算符更改为&gt;或者&lt;适当地改变字段[“a”]的值,规则仍然成功!这是因为&gt;和&lt;在字符串上不是技术上有效的运算符,所以两个操作数转换为数值并进行比较?

1 个答案:

答案 0 :(得分:0)

Drools似乎在版本5.3和5.4之间以不同方式处理类型强制。沃尔夫冈在Drools User Forum上给出了一个很好的例子。

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