Как сравнить java-объект в jess

У меня проблема, когда я сравниваю объект 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. Когда объект PizzaBase в Pizza равен PizzaBase1 (размер = 9), но JESS не создает для меня новый факт. По моему мнению, я думаю, что JESS не может сравнить объект Java, созданный из класса. Следовательно, JESS не добавляет никаких фактов.

Итак, «Как решить эту проблему?», Потому что я смотрю руководство на веб-сайте JESS, но там нет названия, соответствующего моей проблеме.

Благодарить!


person newnok6    schedule 02.10.2014    source источник


Ответы (1)


Возможно, вы пропустили раздел 5.3.2. Добавление объектов Java в рабочую память.

Объект Java — это не то же самое, что факт, даже если вы получаете теневой (!) факт из POJO, используя переменные from-class и include. Факт содержит ссылку на объект Java, который вы вставляете, вызывая (add ?aNewObject) в зарезервированном имени слота OBJECT.

Измените правило следующим образом:

 (defrule make-pizza
    (PizzaBase{size == 9}(OBJECT ?pizzaBase1))
    (Pizza(pizzaBase ?pizzaBase1))  
    =>  
     (add (new PizzaBase "New DeepPan" 10))  
     )  
person laune    schedule 02.10.2014
comment
Большое спасибо !!! Это работает прямо сейчас. Могу я задать вам вопрос? Это решение может работать со списком объектов Java или нет? - person newnok6; 02.10.2014
comment
Вы должны показать некоторый код, где люди могут видеть, какой список вы имеете в виду, в каком классе Java он встречается и что должно соответствовать чему. - Вероятно, лучше всего пометить этот вопрос как отвеченный и начать новый вопрос, опубликовав все подробности. - person laune; 02.10.2014