0

手動で型変換を行わなくても、Droolsに文字列と整数の比較を処理させる方法はありますか?

ルール内の文字列を整数と比較するのに問題があります。ルールは次のように簡略化できます。ここで、フィールドは単なるMap<String, String>。です。

rule "Test Rule"
    when
        MapTest(fields["a"] != null, fields["a"] == 10)
    then
        System.out.println( "test succeeded" );
end

問題は、このルールが与えられた場合、a = "10"の場合でも、結果が発生しないことです。セクション4.8.3.3.3のドキュメントによると、「強制は常にフィールドタイプを優先し、値タイプは優先しません」。したがって、このルールは10を「10」に強制変換する必要があるように見えます。その後、この比較はtrueを返すはずですが、そうではありません。

10を「10」に変更すると、ルールは成功します。また、Integer.parseInt(fields ["a"])を実行すると、ルールは成功します。

さらに興味深いのは、演算子を>または<に変更し、fields ["a"]の値を適切に変更すると、ルールは引き続き成功することです。これは、>と<が文字列に対して技術的に有効な演算子ではないため、2つのオペランドが数値に変換されて比較されるためですか?

4

1 に答える 1

0

Droolsは、バージョン5.3と5.4の間で型強制を異なる方法で処理するように見えます。Wolfgangは、DroolsUserForumで違いの良い例を示しました。

私には、これはバージョン5.3のバグのように見えます。これは、ドキュメントに強制を試みる必要があると記載されているためですが、例によれば、そうではありません(または少なくとも適切に行われていません)。結局、>演算子と<演算子がどのように機能するかはまだわかりませんが、少なくとも、私の場合は文字列を数値に解析する必要があることを知るのに十分な情報を収集しました。

于 2012-07-06T18:28:06.157 に答える