Java OptaPlanner ClassCastException在ComparatorSelectionSorter处

Java OptaPlanner ClassCastException在ComparatorSelectionSorter处,java,optaplanner,Java,Optaplanner,我试图在示例中实现Nurserverstering之类的东西,所以除了“解算器/流口水和移动”中的类之外,我做的一切都是一样的(还有人能解释他们到底做了什么吗?) 所以,我的问题是,我实现了比较指标:EmployeeStrength Comparator和JobDifficulty Comparator,它们就像NurseServering示例中的EmployeeStrength Comparator和ShiftaSignature Difficulty Comparator 所以我设置了我的规

我试图在示例中实现Nurserverstering之类的东西,所以除了“解算器/流口水和移动”中的类之外,我做的一切都是一样的(还有人能解释他们到底做了什么吗?)

所以,我的问题是,我实现了比较指标:EmployeeStrength Comparator和JobDifficulty Comparator,它们就像NurseServering示例中的EmployeeStrength Comparator和ShiftaSignature Difficulty Comparator

所以我设置了我的规则,我的解决方案,并开始解决,但我得到了这个错误:

Exception in thread "main" java.lang.ClassCastException: org.demo.DemoApp.domain.JobAssignment cannot be cast to org.demo.DemoApp.domain.Employee
at org.demo.DemoApp.domain.solver.EmployeeStrengthComparator.compare(EmployeeStrengthComparator.java:12)
at java.util.TimSort.countRunAndMakeAscending(TimSort.java:355)
at java.util.TimSort.sort(TimSort.java:220)
at java.util.Arrays.sort(Arrays.java:1512)
at java.util.ArrayList.sort(ArrayList.java:1454)
at java.util.Collections.sort(Collections.java:175)
at org.optaplanner.core.impl.heuristic.selector.common.decorator.ComparatorSelectionSorter.sort(ComparatorSelectionSorter.java:45)
at org.optaplanner.core.impl.heuristic.selector.value.decorator.SortingValueSelector.constructCache(SortingValueSelector.java:43)
at org.optaplanner.core.impl.heuristic.selector.common.SelectionCacheLifecycleBridge.phaseStarted(SelectionCacheLifecycleBridge.java:49)
at org.optaplanner.core.impl.phase.event.PhaseLifecycleSupport.firePhaseStarted(PhaseLifecycleSupport.java:39)
我希望有人知道我出错的原因,当然可以提供更多的信息来源,但我想原因很明显,因为我对这个框架非常陌生,可能会错过配置中的一些东西

UPD: 所以就像:

@PlanningEntityCollectionProperty
@ValueRangeProvider(id = "employeeRange")
public List<JobAssignment> getJobAssignments() {
    return jobAssignments;
}
@PlanningEntityCollectionProperty
@ValueRangeProvider(id=“employeeRange”)
公共列表getJobAssignments(){
返回工作分配;
}

哦,好吧。。。我意外地将属性
ValueRangeProvider
添加到了计划实体JobAssignment,当它应该放在Employee上时,现在就可以了

UPD:

应该是这样的:

@ValueRangeProvider(id = "employeeRange")
public List<Employee> getEmployees() {
    return employees;
}

@PlanningEntityCollectionProperty
public List<VisitAssignment> getVisitAssignments() {
    return visitAssignments;
}
@ValueRangeProvider(id=“employeeRange”)
公开名单{
返回员工;
}
@PlanningEntityCollectionProperty
公共列表GetVisitAsignments(){
回访指示;
}

在这些上使用哪种方法?通常情况下,ValueRangeProvider位于解决方案类的getter(或规划实体,但这不太常见)上。非常奇怪的是,OptaPlanner没有快速失败(带有一条漂亮的错误消息),因为规划变量的类型与ValueRangeProvider的类型不匹配。如果真是这样的话,请随意打开一个jira。@GeoffreyDeSmet哇,感谢您的回复,Geoffrey,这真是一个很棒的框架!这完全是我的错:)只是在解决方案类中混淆了属性。只是想知道,示例中是否存在对类模式的描述?我想这对于快速参与Optaplanner的开发非常有用。请参阅我在Optaplanner.org上关于时间设计模式和docs chapter Planner配置部分的最新博客“我的类是实体还是…?”,感谢您提供的片段Greag!对于6.4.0.Beta1。