根据文档,“强制总是有利于字段类型,而不是值类型”
我试过了,但并不总是正确的。
规则是:
rule "get event field "
when
m : Message( getEventField("bigDecimalB") > "7.5" )
then
System.out.println( "hit" );
end消息类:
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();在大多数情况下,它是“命中比较”,显然是10.2 > 7.5,所以它输出"bigDecimal“。
但它有时会失败,并且不会打印“hit”。
我认为这是因为强制是不成功的,它是“字符串比较”,很难复制。我完全迷惑了,也不知道为什么。
我使用的是drools-6.2.0-final和阿里巴巴的fastjson(https://github.com/alibaba/fastjson)。
非常感谢。
发布于 2016-06-11 23:42:21
如果你有一个像这样的方法声明:
public Object getFooField(String key)你认为一个愚蠢的计算机程序会对该方法的返回类型有什么看法?
https://stackoverflow.com/questions/37764175
复制相似问题