使用在计划实体中定义的布尔型计划变量为:
@PlanningVariable(nullable = true, valueRangeProviderRefs = {"selectedRange"})
public Boolean getSelected() {
return selected;
}
public void setSelected(Boolean selected) {
this.selected = selected;
}
在计划解决方案中,我将值范围提供程序定义为:
@ValueRangeProvider(id = "selectedRange")
List<Boolean> getValueRange() {
return Arrays.asList(Boolean.FALSE, Boolean.TRUE);
}
public List<Boolean> getBooleanList() {
return selectedList;
}
public void setBooleanList(List<Boolean> selectedList) {
this.selectedList = selectedList;
}
我收到以下错误:
线程“ AWT-EventQueue-0”中的异常
java.lang.IllegalArgumentException:
entityClass
具有带PlanningVariable
注释的属性(已选中)且
valueRangeProviderRef
(selectedRange)在注册的
PlanningSolution
或PlanningEntity
。valueRangeProviderRef
(selectedRange)不会出现在valueRangeProvideIds
([])。我无法识别问题原因。
最佳答案
通常,我会说:您在解决方案类的属性上缺少@ValueRangeProvider
。但看起来您已经拥有了。由于某种原因,它只是反映了您的计划解决方案类而没有选择。
A)如果您使用的是6.3.0.Final
或更高版本,则您的代码应该可以使用。如果您使用的是旧版本,则可能是因为getValueRange()
方法不是公开的(IIRC的6.3修复程序)。
B)如果getValueRange()
方法是在超类上定义的,而不是在实际的计划解决方案类上定义的,则只有在该超类也被称为IIRC时也才是正确的计划解决方案类,该方法才有效。