Drools比较操作需要兼容类型(从5.1.1升级 - > 5.5.0)

时间:2013-10-03 01:19:24

标签: java drools

我有一些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是一个数字呢?

2 个答案:

答案 0 :(得分:0)

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

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

根据您的使用情况,可以删除第一个模式中的'this [“FailureLimit”]!= null'。

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

希望它有所帮助,

答案 1 :(得分:0)

原来答案只是在比较中投下。

Map( $limit: this["FailureLimit"] ) 
activity: LimitExceededActivity( failureRate > (Float) $limit)