首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >口水的强制失败了

口水的强制失败了
EN

Stack Overflow用户
提问于 2016-06-11 21:16:05
回答 1查看 32关注 0票数 0

根据文档,“强制总是有利于字段类型,而不是值类型”

我试过了,但并不总是正确的。

规则是:

代码语言:javascript
复制
rule "get event field "
when
    m : Message( getEventField("bigDecimalB") > "7.5" )
then
    System.out.println( "hit" );

end

消息类:

代码语言:javascript
复制
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
}

测试:

代码语言:javascript
复制
        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)。

非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2016-06-11 23:42:21

如果你有一个像这样的方法声明:

代码语言:javascript
复制
 public Object getFooField(String key)

你认为一个愚蠢的计算机程序会对该方法的返回类型有什么看法?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37764175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档