Hibernate Bean的Equals方法重载问题
代码如下:
/** * 判断当前流程实例上下文中,是否存在Blocking(阻挡性)的任务 * 规则 * 1.任务未结束 * 2.任务是必办理的 * 3.当前任务实例的token和执行上下文的token一致 * @param token * @return */public boolean hasBlockingTaskInstances(FlowToken token) {boolean hasBlockingTasks = false;System.out.println("LOC_1 :" + token.getId());Set<TaskInstance> taskInstances = flowInstance.getTaskInstances();if (taskInstances!=null) {Iterator<TaskInstance> iter = taskInstances.iterator();while ( (iter.hasNext()) && (!hasBlockingTasks)) {System.out.println("LOC_2 : " + taskInstance.getFlowToken().getId());System.out.println("LOC_3 : " + token == taskInstance.getFlowToken());System.out.println("LOC_4 : " + token.equals(taskInstance.getFlowToken());TaskInstance taskInstance = (TaskInstance) iter.next();if ( (! taskInstance.hasEnded()) //任务未结束 && (taskInstance.getIsBlocking()) //任务是必办理的&& (token!=null) && (token.equals(taskInstance.getFlowToken())) ) {hasBlockingTasks = true;}}}return hasBlockingTasks;}/* (non-Javadoc) * @see java.lang.Object#equals(java.lang.Object) */@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (!(obj instanceof FlowToken))return false;final FlowToken other = (FlowToken) obj;if (id == null || other.id == null) {return false;} else if (!id.equals(other.id))return false;return true;}public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (!(obj instanceof FlowToken)) return false; final FlowToken other = (FlowToken) obj; if (id == null || other.id == null) { return false; } else if (!id.equals(other.id)) return false; return true; } public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (!(obj instanceof FlowToken)) return false; final FlowToken other = (FlowToken) obj; if (id == null || other.id == null) { return false; } else if (!id.equals(other.id)) return false; return true; } public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (!(obj instanceof FlowToken)) return false; final FlowToken other = (FlowToken) obj; if (id == null || other.id == null) { return false; } else if (!id.equals(other.id)) return false; return true; }
确实有这个问题。但就性能而言,尤其是在有了类型约束的Set和Map的容器比较中,我还是偏向于旧的,“带有问题”但高性能的实现。当然,会慎重的考虑到文章中提到的bug(如果出现了逻辑上的不正确,特别会去思考一下,是不是这个问题造成的,呵呵)
确实有这个问题。但就性能而言,尤其是在有了类型约束的Set和Map的容器比较中,我还是偏向于旧的,“带有问题”但高性能的实现。当然,会慎重的考虑到文章中提到的bug(如果出现了逻辑上的不正确,特别会去思考一下,是不是这个问题造成的,呵呵) if (getClass().getPackage() != other.getClass().getPackage()) { return false; }