2014-10-02 39 views
1

比较Java对象我有一个问题,当我比较Java对象的Java类如何杰斯

内部特性,这将是我的CLP文件

(import Model.*) 

(deftemplate PizzaBase  
    (declare (from-class PizzaBase) 
      (include-variables TRUE))) 

(deftemplate PizzaTopping 
    (declare (from-class PizzaTopping) 
      (include-variables TRUE))) 

(deftemplate Pizza 
    (declare (from-class Pizza) 
      (include-variables TRUE))) 

(defrule make-pizza 
     ?pizzaBase1 <-(PizzaBase{size == 9}) 
     (Pizza(pizzaBase ?pizzaBase1)) 
     => 
     (add (new PizzaBase "New DeepPan" 10)) 
     ) 

从我的规则根据,我想创建一个新的pizzaBase.Pizza中的pizzaBase对象等于pizzaBase1(size = 9),但JESS并没有为我创建一个新的事实。 从我的想法来看,我认为JESS无法比较从该类创建的Java对象。因此,JESS没有添加任何事实。

那么,“如何解决这个问题?”,因为我看了JESS网站上的手册,但根据我的问题没有任何标题。

谢谢!

回答

2

您可能忽略了第5.3.2节,将Java对象添加到工作内存中。

即使您使用from-class和include-variables从POJO派生影子(!)事实,Java对象与事实也不相同。事实包含通过在保留槽名OBJECT中调用(add ?aNewObject)来插入Java对象的引用。

更改您的规则是这样的:

(defrule make-pizza 
    (PizzaBase{size == 9}(OBJECT ?pizzaBase1)) 
    (Pizza(pizzaBase ?pizzaBase1)) 
    => 
    (add (new PizzaBase "New DeepPan" 10)) 
    ) 
+0

感谢了很多!它现在可以工作了。我可以问你一个问题吗?这个解决方案可以与java对象列表一起工作吗? – newnok6 2014-10-02 10:46:24

+0

你应该展示一些代码,人们可以看到你的意思是哪个“列表”,它出现在哪个Java类以及什么应该匹配什么。 - 最好将这个问题标记为“回答”并开始一个新问题,发布所有细节。 – laune 2014-10-02 10:51:48