2016-03-31 16 views
0

私は非常に単純なルールをDroolsに追加しようとしています(それはまだ成熟していませんが...) $ firstNumと$ secondNumは変数に代入することはできません。助けてください...Droolsの追加プログラム

rule "Addition rule" 
    when 
     act : CalcOperation(CalcOperation.ADD, $firstNum : firstNum, $secondNum : secondNum) 
    then 
     $out : $firstNum + $secondNum;; 
     //logger.info("Result of addition is : "+$out); 
end 

............................................................................... 

Here is the CalcOperation class. 

public class CalcOperation { 
    Double firstNum; 
    Double secondNum; 
    public static Boolean ADD; 
    public static Boolean SUB; 
    public static Boolean MUL; 
    public static Boolean DIV; 

    public CalcOperation(Boolean operation, Double m, Double n){ 
     this.firstNum = m; 
     this.secondNum = n; 
    } 

答えて

0

あなたはもっとJavaを掘り下げ、Droolsのドキュメントをもっともっと掘り下げる必要があります。

静的変数は、使用しているコンテキストでは役に立ちません。加算、減算などのために別々のオブジェクトを使用する場合は、Operationをサブクラス化することができます。インスタンス変数はプライベートで、少なくともゲッ​​ターを持っていなければなりません。

原則として、適切なゲッターを持っていない(または公開されている - 推奨されていない)フィールドに変数($firstNumなど)をバインドすることはできません。

その部分または結果はJavaで記述する必要があります。 $out : $firstNum + $secondNum;;ではなく、の有効なJava文です。ここで

は、Javaのクラスです:

public enum Operator { ADD, SUB, MUL, DIV }; 

public class Operation { 
    private double op1; 
    private double op2; 
    private Operator op; 
    public Operation(Operator op, double op1, double op2){ 
     this.op = op; 
     //... 
    } 
    public Operator getOp(){ return op; } 
    //... 
} 

そして、ここでは、ルールです:

rule "exec op" 
when 
    $op: Operation($op: Operator.ADD, $op1: op1, $op2: op2) 
then 
    System.out.writeln("result: " + ($op1 + $op2)); 
end 
関連する問題