Drools 6.5 错误编译规则引用地图

Drools 6.5 Error Compiling Rule Referencing A Map

我正在尝试编译以下规则并遇到错误 The method concatenateValues(String, String, String) in the type StringHelper is not applicable for the arguments (Object, Object, Object)。我的问题是为什么 $map.get("KEY_B"),.. 不是 return 字符串值?

rule "RULE01"   
    no-loop true
    when
        $attribute:String()
        $map : Map(this["KEY_A"] == "VALUE_A")
    then
        ruleResponse.put("ruleName",drools.getRule().getName());
        $attribute = StringHelper.concatenateValues($map.get("KEY_B"),$map.get("KEY_C"), $map.get("KEY_D"));
        ruleResponse.put("result",$attribute);
end


public static String concatenateValues(Object value1, Object value2, Object value3){
        StringBuilder sb = new StringBuilder(value1 == null ? "" : value1.toString())
                                     .append(value2 == null ? "" : value2.toString())
                                     .append(value3 == null ? "" : value3.toString());
        return sb.toString();
    }

Drools 不支持泛型类型。 get 的结果类型为 Object.

您可以修复您的 StringHelper.concatenateValues 以像这样运行:

StringHelper.concatenateValues( Object o1, Object o2, Object o3 ){
    return concatenateValues( o1.toString, o2.toString, o3.toString );
}