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