0

我有一些 Drools 规则在 Drools 5.1.1 中运行良好,但在升级到 5.5.0 时会中断。这是一个例子:

when
    Map( $limit: this["FailureLimit"] ) 
    activity: LimitExceededActivity( failureRate > $limit)
then
    ...

我收到此错误:

[Error: Comparison operation requires compatible types. Found float and class java.lang.Object]
[Near : {... failureRate > $limit ....}]

本例中的映射是 HashMap<String, Number>。我知道 Drools 不一定会因为擦除而知道这一点,但我怎样才能说服它 $limit 是一个数字?

4

2 回答 2

0

原来答案只是进行比较。

Map( $limit: this["FailureLimit"] ) 
activity: LimitExceededActivity( failureRate > (Float) $limit)
于 2013-10-09T21:35:21.017 回答
0

不是太花哨,但这里有一个解决方案:

when
    $m: Map(this["FailureLimit"] != null) 
    LimitExceededActivity( $f: failureRate)
    $limit: Number(floatValue < $f) from $m["FailureLimit"]
then

根据您的用例,可以删除第一个模式中的 'this["FailureLimit"] != null'。

这个解决方案背后的想法是让'from'模式为你做演员。

希望能帮助到你,

于 2013-10-03T13:01:31.687 回答