如果我尝试使用getter访问java bean的属性,它会给我带来错误,而使用bean属性可以直接正常工作。我知道直接使用bean属性是documentation中所述的推荐方法。但是,在这种情况下,我更喜欢使用getter来解决某些特定原因。
这是规则文件和我得到的错误。我会理解为什么我会遇到这种奇怪的行为的任何线索。
规则文件
package test.rules
import java.lang.Math;
import test.MatFact;
import test.MatHotelAlternative;
import test.MatHotelItem;
dialect "mvel"
rule "0"
salience 0
when
$item: MatHotelItem()
$alt: MatHotelAlternative( processed == false
&& (getStarRating() == "*")
)
then
modify ($alt) {
// some actions here
}
end
错误
[16,26]: [ERR 101] Line 16:26 no viable alternative at input ')' in rule "0" in pattern MatHotelAlternative
[16,28]: [ERR 102] Line 16:28 mismatched input '==' expecting ')' in rule "0" in pattern MatHotelAlternative
[17,1]: [ERR 102] Line 17:1 mismatched input ')' expecting 'then' in rule "0"
相关课程
MatHotelAlternative
public class MatHotelAlternative extends MatItemAlternative<Hotel>
{
public String getStarRating()
{
return alternative.getStarRating();
}
}
MatItemAlternative
public abstract class MatItemAlternative<T extends HolidayItem>
{
private boolean processed;
protected T alternative;
public MatItemAlternative( T alternative )
{
this.alternative = alternative;
}
public boolean isProcessed()
{
return processed;
}
public void setProcessed( boolean processed )
{
this.processed = processed;
}
}
答案 0 :(得分:0)
这应该有效: $ alt:MatHotelAlternative(已处理== false,starRating ==“*”)
你可以尝试一下吗? 你在这个替代方案中遇到了哪些错误?答案 1 :(得分:0)
看起来类加载器一直在加载Drools 5.1.1,这似乎是导致问题的原因。当我切换到Drools 5.5.0 Final时,问题得到了解决。