根据文档,"强制总是支持字段类型而不是值类型"
我尝试过但并非总是如此。
规则:
rule "get event field "
when
m : Message( getEventField("bigDecimalB") > "7.5" )
then
System.out.println( "hit" );
end
Message类:
public class Message {
private Map<String, Object> map = new HashMap<String, Object>();
public Object getEventField(String key) {
Object object = map.get(key);
if (object != null) {
//class=java.math.BigDecimal in my test
System.out.println("getEventField, fieldName=" + key + ", class=" + object.getClass().getCanonicalName());
}
return object;
}
//setter and getter
}
和测试:
String str = "{\"bigDecimalB\":10.2}";
Map<String, Object> map = JSON.parseObject(str);
Message message = new Message();
message.setMap(map);
kSession.insert(message);
kSession.fireAllRules();
在大多数情况下,它是&#34; bigDecimal比较&#34;显然10.2&gt; 7.5,所以打印&#39;点击&#39;。
但它有时可能会失败而且不会打印出来#。
。我认为这是因为强制不是成功的,而且是#34;字符串比较&#34;。很难再现。我完全糊涂了,不知道为什么。
我使用drools-6.2.0-final和阿里巴巴的fastjson(https://github.com/alibaba/fastjson)。
非常感谢。
答案 0 :(得分:0)
如果你有这样的方法声明:
public Object getFooField(String key)
你认为一个愚蠢的计算机程序可能会考虑该方法的返回类型?