Java Optaplanner IllegalArgumentException:valueRangeProviderRef未出现在ValueRangeProviderId中
使用规划实体中定义的布尔规划变量: 在规划解决方案中,我将值范围提供程序定义为:Java Optaplanner IllegalArgumentException:valueRangeProviderRef未出现在ValueRangeProviderId中,java,optaplanner,Java,Optaplanner,使用规划实体中定义的布尔规划变量: 在规划解决方案中,我将值范围提供程序定义为: @ValueRangeProvider(id=“selectedRange”) 列表getValueRange(){ 返回Arrays.asList(Boolean.FALSE,Boolean.TRUE); } 公共列表getBooleanList(){ 返回所选列表; } 公共无效设置工具列表(列表已选列表){ this.selectedList=selectedList; } 我收到以下错误: 线程“AWT-
@ValueRangeProvider(id=“selectedRange”)
列表getValueRange(){
返回Arrays.asList(Boolean.FALSE,Boolean.TRUE);
}
公共列表getBooleanList(){
返回所选列表;
}
公共无效设置工具列表(列表已选列表){
this.selectedList=selectedList;
}
我收到以下错误:
线程“AWT-EventQueue-0”中出现异常java.lang.IllegalArgumentException:
entityClass
有一个PlanningVariable
注释属性(选中)
使用的valueRangeProviderRef
(selectedRange)在服务器上不存在
已注册的规划解决方案
或规划实体
valueRangeProviderRef
(selectedRange)未显示在中
valueRangeProvideId
([])
我无法识别问题的原因。通常我会说:您的解决方案类的属性缺少
@ValueRangeProvider
。但看起来你有。出于某种原因,当它反映在您的计划解决方案类中时,它只是不接受它
A) 如果您使用的是6.3.0.Final
或更高版本,您的代码应该可以工作。如果您使用的是旧版本,可能是因为getValueRange()
方法不是公共的(6.3修复了该IIRC)
B) 如果
getValueRange()
方法是在一个超类上定义的,而不是在实际的计划解决方案类上定义的,那么只有当该超类也被称为适当的计划解决方案类IIRC时,它才会起作用。谢谢,回答得好。我使用的是6.2.0版,我在公共列表getValueRange()中添加了public,错误消失了。
@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;
}