手動で型変換を行わなくても、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つのオペランドが数値に変換されて比較されるためですか?