0

如果我尝试使用 getter 访问 java bean 的属性,它会给我错误,而直接使用 bean 属性可以正常工作。我知道直接使用 bean 属性是推荐的方式,如文档中所述。但是,在这种情况下,出于某些特定原因,我更喜欢使用 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"

相关课程

垫酒店替代品

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;
    }
}
4

2 回答 2

0

这应该有效: $alt: MatHotelAlternative( 已处理 == false, starRating == "*")

你可以试试吗?您在使用此替代方案时遇到了哪些错误?

于 2013-09-23T20:23:44.070 回答
0

看起来类加载器一直在加载 Drools 5.1.1,这似乎是问题的原因。当我切换到 Drools 5.5.0 Final 后,问题就解决了。

于 2013-10-09T06:35:53.717 回答