使用在计划实体中定义的布尔型计划变量为:

@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)在
  注册的PlanningSolutionPlanningEntity
  
  valueRangeProviderRef(selectedRange)不会出现在
  valueRangeProvideIds([])。


我无法识别问题原因。

最佳答案

通常,我会说:您在解决方案类的属性上缺少@ValueRangeProvider。但看起来您已经拥有了。由于某种原因,它只是反映了您的计划解决方案类而没有选择。

A)如果您使用的是6.3.0.Final或更高版本,则您的代码应该可以使用。如果您使用的是旧版本,则可能是因为getValueRange()方法不是公开的(IIRC的6.3修复程序)。

B)如果getValueRange()方法是在超类上定义的,而不是在实际的计划解决方案类上定义的,则只有在该超类也被称为IIRC时也才是正确的计划解决方案类,该方法才有效。

07-27 20:28