Drools 条件无法使用 Enum 键从 Map 中检索 object

Drools condition cannot retrieve object from Map with Enum key

我正在将使用 drools 5.3 的应用程序迁移到较新的 drools 6.5 版本。这是我的事实的摘录:

public class Convention {
  [...]
  private Map<ECommissionType, List<Commission>> commissions = new HashMap<>();
  [...]
}

和一个非常简单的枚举:

public enum ECommissionType {
  ACQ,RIS,POF,[...]
}

我正在使用一个决定 table,条件之一 header 如下(假设 $convention 在前一个条件下正确初始化并且是Convention class 所示):

$comm : Commission() from $convention.getCommissions().get(ECommissionType.)

在定义规则的行中,我使用了枚举值之一,例如 POFRIS。 Drools 5.3 正在编译此条件,但 drools 6.5 不是。它失败并显示此错误消息:

Unable to Analyse Expression $convention.getCommissions().get(ECommissionType.RIS)):
sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl cannot be cast to java.lang.Class : [Rule name='B_CommissionLigne_98']

任何解决此错误的见解?

你有

$conv : Commission from $convention.getCommissions().get(ECommissionType.)

您需要在Commission之后添加一个()

5.3 和 6.0 之间的解析器和表达式求值机制发生了相当大的变化,这可能引入了一个错误。

编辑 是的,一个错误。缩短一些名称但使用相同的类型,这样可以避免问题:

rule comms
when
  $conv: Convention()
  $comm: Comm() from (ArrayList)($conv.getComms()).get(Type.AAA)
then

(你为什么不使用 EnumMap??)