Parameters Drools条件无法使用枚举键从映射中检索对象

Parameters Drools条件无法使用枚举键从映射中检索对象,parameters,enums,hashmap,drools,Parameters,Enums,Hashmap,Drools,我正在迁移一个在较新的drools 6.5版本上使用drools 5.3的应用程序。以下是我的事实摘录: public class Convention { [...] private Map<ECommissionType, List<Commission>> commissions = new HashMap<>(); [...] } 我使用的是一个决策表,其中一个条件头如下所示(假设$convention在前一个条件中正确初始化,并且是所示

我正在迁移一个在较新的drools 6.5版本上使用drools 5.3的应用程序。以下是我的事实摘录:

public class Convention {
  [...]
  private Map<ECommissionType, List<Commission>> commissions = new HashMap<>();
  [...]
}
我使用的是一个决策表,其中一个条件头如下所示(假设
$convention
在前一个条件中正确初始化,并且是所示
convention
类的实例):

在定义规则的行中,我使用了枚举的一个值,例如
POF
RIS
。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.$1)
您需要在
佣金后添加
()

在5.3和6.0之间,解析器和表达式计算机制发生了很大的变化,这可能导致了一个bug

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

rule comms
when
  $conv: Convention()
  $comm: Comm() from (ArrayList)($conv.getComms()).get(Type.AAA)
then
(为什么不使用EnumMap??)

您有

$conv : Commission from $convention.getCommissions().get(ECommissionType.$1)
您需要在
佣金后添加
()

在5.3和6.0之间,解析器和表达式计算机制发生了很大的变化,这可能导致了一个bug

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

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

(为什么不使用EnumMap??)

True,我忘记了两个括号。我将它们添加到我的帖子中。但我真的不明白你的答案。我在很多决策表中使用这种语法,在
from
关键字的右侧有一个
列表
,左侧有一个对象。它正在drools 5和drools 6上工作,以便对列表中的对象应用操作。我只想在决策表的action列中对列表的所有对象调用一个方法(setter)。顺便说一句,我会看看EnumMap,从来没有听说过。哎呀,现在我很困惑,我不知道是什么原因,可能只是缺少括号;-)请看我修改后的答案,我会调查。@Wis如果你足够关心,你可以在Drools错误报告网站上提出JIRA,或者向Drools用户列表发送邮件。这可能是一种黑暗魔法,但确实有效。我将尝试将此主题作为bug参考发送给drools开发团队。非常感谢你的帮助!是的,我忘了两个括号。我将它们添加到我的帖子中。但我真的不明白你的答案。我在很多决策表中使用这种语法,在
from
关键字的右侧有一个
列表
,左侧有一个对象。它正在drools 5和drools 6上工作,以便对列表中的对象应用操作。我只想在决策表的action列中对列表的所有对象调用一个方法(setter)。顺便说一句,我会看看EnumMap,从来没有听说过。哎呀,现在我很困惑,我不知道是什么原因,可能只是缺少括号;-)请看我修改后的答案,我会调查。@Wis如果你足够关心,你可以在Drools错误报告网站上提出JIRA,或者向Drools用户列表发送邮件。这可能是一种黑暗魔法,但确实有效。我将尝试将此主题作为bug参考发送给drools开发团队。非常感谢你的帮助!