當使用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