当使用Drools 5.5 final来比较字符串值字段时,我有一些令人费解的问题。比较流水线中的字符串值字段5.5
基本上,我试图找出是否有一对人共用同一个名字。 Person类看起来如下:
public class Person {
private String name;
public String getName() { return name; }
public void setName(String n) { this.name = n; }
public Person(String name) { this.name = name;}
}
,我试图触发的规则:
rule "uniquePersonName"
when
$p1: Person($n1: name)
$p2: Person(this != $p1, name == $n1)
then
System.out.println("Duplicated person name found : " + $n1 + " " + $p2.getName());
end
但它从来没有得到触发。但是,如果我将其更改为:
when
$p1: Person($n1: name)
$p2: Person(this != $p1, name != $n1)
系统按预期工作,换句话说,它会查找人员名称不同的所有对。
深入挖掘之后,我发现如果将名称字段更改为Integer类型,原始规则正常工作。这让我觉得这是由于String比较的一些错误。因此,与定义为String类型的姓名字段,我想:
- 没有(名称== $ N1)
- (名称== $ N1)
- name.toString()= $ N1。的toString()
- 名== $ p1.getName()
不幸的是,他们没有工作。
最后,我能得到它的行为的唯一方法就是写的规则:
when
$p1: Person($n1: name)
$p2: Person(name == $n1)
eval($p1!=$p2)
这使我想到也许问题是如何“这个”的作品,以及如何字符串比较的组合引起已经完成了。
这是非常基本的功能,我会惊讶这是由Drools 5.5 final中的错误引起的。但是,我再也看不到一条路了。你们能帮忙吗?
谢谢。
GW