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;
}