Ошибка «Не удалось найти класс» в Drools

я пытаюсь определить простую функцию в слюнях:

function void difference(List<String> fileOld, List<String> fileNew)
{

   ArrayList<String> add = new ArrayList<String>(fileNew);
   add.removeAll(fileOld);
   System.out.println("files Added: " + add);

   ArrayList<String> remove = new ArrayList<String>(fileOld);
   remove.removeAll(fileNew);
   System.out.println("files Removed: " + remove);
 }   

но он говорит, что невозможно разрешить список типов при построении функции. java.lang.ClassNotFoundException: невозможно найти класс «Список»] Не удается создать статическую ссылку на нестатический метод getFileOld() из типа FileData Невозможно создать статическую ссылку на нестатический метод getFileNew() из типа FileData

Мои правила:

rule "files are equal"

when 
    FileData(fileOld == fileNew)        

then
   System.out.println("files are equal");
end

rule "files not equal"
when
    not FileData(fileOld == fileNew)
then
   System.out.println("files are not equal");
   difference(FileData.getFileOld(),FileData.getFileNew()); 
end

fileOld и fileNew — это список имен файлов в папке в двух разных экземплярах. я пытаюсь найти разницу между fileOld и fileNew и отобразить список добавленных/удаленных файлов.


person user3360061    schedule 28.02.2014    source источник
comment
пожалуйста, обратитесь к этому stackoverflow.com/ вопросы/11062657/   -  person swapnil7    schedule 28.02.2014
comment
я это видел.. но все равно не могу связать это с этим. я хочу знать, какие изменения я могу внести в свои правила и функцию четко.   -  person user3360061    schedule 28.02.2014


Ответы (2)


Невозможно найти класс «Список»] Невозможно создать статическую ссылку на нестатический метод getFileOld() из типа FileData Невозможно создать статическую ссылку на нестатический метод getFileNew() из типа FileData

Из приведенных выше утверждений в вашем вопросе кажется, что вы получаете доступ к нестатическим методам с помощью FileData (я думаю, что это класс). Если методы нестатические, вы не можете получить доступ к своим методам.

Classname.nonstatic_method (не разрешено)

Имя класса.static_method (разрешено)

Попробуйте свой код, сделав оба метода статическими. ИЛИ сделать объект FileData, а затем получить доступ к нестатическим методам

person swapnil7    schedule 28.02.2014

В DRL ситуация очень похожа на Java. Вы используете либо «импорт», либо полное имя класса:

import java.util.List
import java.util.ArrayList



function void difference(java.util.List<String> fileOld, 
                         java.util.List<String> fileNew)

Не помешает прочитать документацию Drools.

person laune    schedule 28.02.2014
comment
благодаря. тем не менее я получаю исключение в потоке main java.lang.RuntimeException: [разница в функциях (строка: 41): невозможно разрешить тип java.util.List‹String› при построении функции. java.lang.ClassNotFoundException: невозможно найти класс 'java.util.List‹String›'] эта ошибка. - person user3360061; 28.02.2014