Java Drools比较操作需要兼容的类型(从5.1.1升级到>;5.5.0)

Java Drools比较操作需要兼容的类型(从5.1.1升级到>;5.5.0),java,drools,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 fl

我有一些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。我知道Drools不一定知道这是因为擦除,但我如何才能让它相信$limit是一个数字?

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

when
    $m: Map(this["FailureLimit"] != null) 
    LimitExceededActivity( $f: failureRate)
    $limit: Number(floatValue < $f) from $m["FailureLimit"]
then
什么时候
$m:Map(此[“FailureLimit”]!=null)
LimitExceededActivity($f:故障率)
$limit:从$m[“FailureLimit”]开始的数字(floatValue<$f)
然后
根据您的用例,“this[“FailureLimit”]!=可以删除第一个模式中的null

这个解决方案背后的想法是让“from”模式为您进行角色转换


希望能有所帮助,

结果证明答案只是简单地进行比较

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