2

Droolsエンジンに挿入されたデータの一部がこの(非常に単純化された)形式に従うシステムで作業しています。

public class Item {
    public String getValueType() { ... }
    public Object getValue() { ... }
}

値はいくつかの異なるタイプである可能性があります。ここで、値のさまざまなフィールドをチェックするための一連のDroolsルールを作成します。これは、次の行に沿ったものです。

$a : Item(valueType == "Car", value.owner.location == "At Home")
$b : Item(valueType == "Payments", value.rates.discounts.percent == 1337)
$c : Item(valueType == "Royalty", value.student.occupation == "Librarian")

...等々。今、私が直面している問題は、Droolsがロード時にルールを静的に型チェックし、Objectが所有者/レート/学生フィールドなどを持つことが保証されていないため、この使用を許可しないことです。

これを行う方法はありますか?おそらく、ある種の型キャストまたは型チェックをバイパスする方法はありますか?

(注:残念ながら、現時点では、すべてをオブジェクトに押し込む代わりに、入力するモデルを変更するオプションはありません。)

4

2 に答える 2

6

Drools 5.5.0以降では、ファクトの属性を「キャスト」できます。このドキュメントのセクション4.1.1.2をお読みください:http://docs.jboss.org/drools/release/5.5.0.Final/droolsjbpm-introduction-docs/html_single/

基本的に、あなたがする必要があるのは:

$a : Item(valueType == "Car", value#Car.owner.location == "At Home")

免責事項:私はこれまでこれを試したことがありません。

于 2013-02-13T13:02:41.587 に答える
2

型宣言で@typesafe(false)を使用することもできますが、他の回答に示されているようにキャストする方がはるかに優れています。

于 2013-02-13T21:10:33.457 に答える