在 drools 中使用枚举
Using enum in drools
我正在解决员工排班问题。那里的限制之一是每个 "type" 的员工应该每天都在场。类型定义为枚举。
我现在已将此规则配置如下:
rule "All employee types must be covered"
when
not Shift(employeeId != null, $employee: getEmployee(), $employee.getType() == "Developer")
then
scoreHolder.addHardConstraintMatch(kcontext, -100);
end
这很好用。但是,我必须为所有可能的员工类型配置类似的规则。
为了概括它,我尝试了这个:
rule "All employee types must be covered"
when
$type: Constants.EmployeeType()
not Shift(employeeId != null, $employee: getEmployee(), $employee.getType() == $type.getValue())
then
scoreHolder.addHardConstraintMatch(kcontext, -100);
end
但是,这条规则不会被执行。下面是我在常量文件
中定义的枚举
public enum EmployeeType {
Developer("Developer"),
Manager("Manager");
private String value;
Cuisine(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
我做错了什么?
我想问题是您从来没有在会话中插入枚举(它们不是事实)。
解决它的一种方法是手动插入它们:
for(EmployeeType type : Constants.EmployeeType.values()){
ksession.insert(type);
}
另一种方法是让您的规则从枚举中获取所有可能的值:
rule "All employee types must be covered"
when
$type: Constants.EmployeeType() from Constants.EmployeeType.values()
not Shift(employeeId != null, $employee: getEmployee(), $employee.getType() == $type.getValue())
then
scoreHolder.addHardConstraintMatch(kcontext, -100);
end
希望对您有所帮助,
我正在解决员工排班问题。那里的限制之一是每个 "type" 的员工应该每天都在场。类型定义为枚举。
我现在已将此规则配置如下:
rule "All employee types must be covered"
when
not Shift(employeeId != null, $employee: getEmployee(), $employee.getType() == "Developer")
then
scoreHolder.addHardConstraintMatch(kcontext, -100);
end
这很好用。但是,我必须为所有可能的员工类型配置类似的规则。
为了概括它,我尝试了这个:
rule "All employee types must be covered"
when
$type: Constants.EmployeeType()
not Shift(employeeId != null, $employee: getEmployee(), $employee.getType() == $type.getValue())
then
scoreHolder.addHardConstraintMatch(kcontext, -100);
end
但是,这条规则不会被执行。下面是我在常量文件
中定义的枚举public enum EmployeeType {
Developer("Developer"),
Manager("Manager");
private String value;
Cuisine(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
我做错了什么?
我想问题是您从来没有在会话中插入枚举(它们不是事实)。 解决它的一种方法是手动插入它们:
for(EmployeeType type : Constants.EmployeeType.values()){
ksession.insert(type);
}
另一种方法是让您的规则从枚举中获取所有可能的值:
rule "All employee types must be covered"
when
$type: Constants.EmployeeType() from Constants.EmployeeType.values()
not Shift(employeeId != null, $employee: getEmployee(), $employee.getType() == $type.getValue())
then
scoreHolder.addHardConstraintMatch(kcontext, -100);
end
希望对您有所帮助,