Drools 比较Drool 5.5中的字符串值字段
当使用Drools 5.5 final来比较字符串值字段时,我遇到了一些令人费解的问题 从本质上说,我试图找出是否有两个人同名。Person类如下所示:Drools 比较Drool 5.5中的字符串值字段,drools,Drools,当使用Drools 5.5 final来比较字符串值字段时,我遇到了一些令人费解的问题 从本质上说,我试图找出是否有两个人同名。Person类如下所示: public class Person { private String name; public String getName() { return name; } public void setName(String n) { this.name = n; } public Person(String name)
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)
该系统按预期工作,换句话说,它会找到所有姓名不同的配对
在深入挖掘之后,我发现如果我将name字段更改为Integer类型,那么原来的规则工作得很好。这让我觉得这是因为字符串比较的一些错误。因此,使用定义为字符串类型的名称字段,我尝试:
not(name==n1美元)
(name=$n1)
name.toString()=$n1.toString()
name=$p1.getName()
when
$p1: Person($n1: name)
$p2: Person(name == $n1)
eval($p1!=$p2)
这让我觉得问题可能是由这个的工作方式和字符串比较方式的组合造成的
这是一个非常基本的特性,我很惊讶这是由Drools 5.5 final中的一个bug引起的。但是,我还是看不到出路。你们谁能帮忙
谢谢
GW结果是这个!=$p1
转换为!这个.equals($p1)
放在引擎盖下,在我的代码中我有一个自动生成的equals
方法(原始帖子中没有显示代码),它完全改变了默认的比较行为。删除equals
方法后,所有方法都按预期工作