Hi,
I recently find out a few issues using for, and I wanted to share it with
you. I made a simple exemple to illustrate my purpose.

My classes are (I did not represent accessors & constructors):

public class Cheese {
    protected String name;
}

public class FrenchCheese extends Cheese{
    private String smell;
}

public class Person {
    private Cheese likes;
}

Here is my rule set :

package rules

rule "likes cheese"
    when
        $person : Person ()
        Cheese(  ) from $person.getLikes()
    then
        System.out.println("likes cheese");
end


rule "likes french cheese"
    when
        $person : Person ()
        FrenchCheese(  ) from $person.getLikes()
    then
        System.out.println("likes french cheese");
end

First test :
        Cheese cheese = new FrenchCheese("good", "camembert");
        Person person = new Person();
        person.setLikes(cheese);

Output :
likes french cheese
likes cheese

Wich is expected...

Second test :
        Cheese cheese = new Cheese();
        Person person = new Person();
        person.setLikes(cheese);

Output :
likes french cheese
likes cheese

That's the first strange thing. As far as I am concerned, rule "likes french
cheese" should not match (since a Cheese is not a FrenchCheese).

I made a change to the second rule :
rule "likes french cheese"
    when
        $person : Person ()
        FrenchCheese( smell == "good" ) from $person.getLikes()
    then
        System.out.println("likes french cheese");
end

Third test :
        Cheese cheese = new Cheese();
        Person person = new Person();
        person.setLikes(cheese);

output :
It throwed an exception : Exception in thread "main"
java.lang.ClassCastException: rules.Cheese
I am not saying the ClassCastException is not to expect in such a case but I
think I would simply expect it not to match (as far as a Cheese is not a
FrenchCheese).

Chris
_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users

Reply via email to