尝试在optaplannercode的实体上添加hashcode时出错



我在optaplanner上的项目练习,我正在尝试在我的实体上添加等价和哈希码。首先,我添加了等价方法,它运行良好!之后,我添加了哈希代码,事情出了问题。

@Override
public boolean equals(Object o) {
if (this == o) {
        return true;
    } else if (o instanceof CloudBus) {
        CloudBus otherBus = (CloudBus) o;
        return (capacity == otherBus.getCapacity());
    } else {
        return false;
    }
}
@Override
public int hashCode() {
    return new HashCodeBuilder()
            .append(capacity)
            .toHashCode();
}

错误:严重:servlet.service((用于servlet [webapp]的上下文[/webapp]抛出异常[在com.webapp.jersey中对规则" cundingStartbustoosmall"的异常后果:。。。。。。

我认为您需要在Cloudbus的equals()hashCode()中包含另一个属性,这将在两个具有相同容量的不同云库之间有所不同。一个好的候选人是公共汽车的ID。由于ID是唯一的,因此在equals()hashCode()中包含其他属性并不多(无论其容量相同等,两个不同的总线总是不平等的(。

仅根据容量进行比较的问题是,两个不同的总线可以相等(并且具有相同的哈希码(。结果,您将拥有两个不同的约束匹配,因此无法将后者添加到ConstraintMatchTotalconstraintMatchSet中,因为"相等"约束匹配已经存在。请参阅CondmaintaintMatchTotal。从异常消息给出更好的格式时,这是显而易见的:

ERROR: SEVERE: Servlet.service() for servlet [WebApp] in context with path [/WebApp] threw exception [
Exception executing consequence for rule "conflictingStartBusTooSmall" in com.webapp.jersey: java.lang.IllegalStateException:
  The constraintMatchTotal (com.webapp.jersey/conflictingStartBusTooSmall=-97hard/0medium/0soft)
  could not add constraintMatch (com.webapp.jersey/conflictingStartBusTooSmall/[CloudRoute-83435, CloudBus-17]=-1hard/0medium/0soft)
  to its constraintMatchSet ([
    com.webapp.jersey/conflictingStartBusTooSmall/[CloudRoute-83555, CloudBus-3]=-22hard/0medium/0soft,
    com.webapp.jersey/conflictingStartBusTooSmall/[CloudRoute-83580, CloudBus-3]=-4hard/0medium/0soft,
    com.webapp.jersey/conflictingStartBusTooSmall/[CloudRoute-83594, CloudBus-3]=-8hard/0medium/0soft,
    com.webapp.jersey/conflictingStartBusTooSmall/[CloudRoute-83753, CloudBus-3]=-1hard/0medium/0soft,
    com.webapp.jersey/conflictingStartBusTooSmall/[CloudRoute-83479, CloudBus-4]=-6hard/0medium/0soft,
--> com.webapp.jersey/conflictingStartBusTooSmall/[CloudRoute-83435, CloudBus-6]=-1hard/0medium/0soft,
    com.webapp.jersey/conflictingStartBusTooSmall/[CloudRoute-83429, CloudBus-8]=-26hard/0medium/0soft,
    com.webapp.jersey/conflictingStartBusTooSmall/[CloudRoute-83610, CloudBus-8]=-17hard/0medium/0soft,
    com.webapp.jersey/conflictingStartBusTooSmall/[CloudRoute-83403, CloudBus-10]=-11hard/0medium/0soft
  ]).
] with root cause

假设所有总线具有相同的容量,突出显示的约束匹配与将插入的约束匹配具有相同的哈希码,因为两者都具有相同的cloudroute和具有相同容量的总线。

相关内容

  • 没有找到相关文章

最新更新