2014-10-02 29 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