Оба эти правила действительны, если у вашего класса есть подходящие имена getter.
Первое правило будет работать для класса Car
, который либо имеет свойство publi c color
или он имеет метод publi c getColor
:
public class Car {
public String color;
}
// or:
public class Car {
private String color;
public String getColor() {
return this.color;
}
}
Аналогично, второе правило будет работать, если ваш класс Car
имеет свойство publi c Door
или publi c getDoor
метод, и Дверь, аналогично, либо публикует c Color
, либо getColor()
.
Другой способ написать второе правило, которое проверяет, что дверь не черная, будет выглядеть так: this:
rule "03: Another way to make sure the car's door cannot be black"
when
Car( $door: door != null ) // gets the Door from the car
Door( color == "black" ) from $door // checks if the Door is black
then
System.out.println("Car's door cannot be black");
end
Этот способ полезен, если вам нужно проверить другие свойства той же двери. Например, предположим, что в вашем автомобиле несколько дверей, а в модели автомобиля - метод List<Door> getDoors();
. Чтобы проверить, есть ли какая-нибудь черная и круглая дверь, вы можете сделать:
rule "04: A car cannot have any black and round doors"
when
Car( $doors: doors != null ) // get all of the Doors for the car
// finds that any one door is both black and round:
exists(Door( color == "black",
shape == "round" ) from $doors)
then
//...
end
Здесь я использовал exists
, потому что на самом деле мне не нужно ничего делать с черной и круглой дверью, я просто хочу убедиться, что он существует.