我对此方法有疑问:
private boolean reflectionEqualsSet(Object left, Object right) {
Set leftSet = (Set) left;
Set rightSet = (Set) right;
if (leftSet == null) {
// POF tricks: if set to serialize is null, the deserialized set is empty
return rightSet != null && rightSet.size() == 0;
}
// check size
if (leftSet.size() != leftSet.size()) {
return false;
}
// check values
for (Object currLeft : leftSet) {
boolean found = false;
for (Object currRight : rightSet) {
if (isEqual(currLeft, currRight)) {
found = true;
break;
}
}
if (!found) {
return false;
}
}
return true;
}
问题是:
我有一个在leftSet
中有三个随机填充值的对象(2个UUID和1个整数)。
我leftSet
中的值完全在for循环中发生了变化。调试时我发现在第一次迭代currSet
已经有完全不同的值,我无法弄清楚原因。
在currRight
的内部循环中,这不会发生。
我已经调试好几个小时了,我发现问题出在那一行,是否有人知道为什么价值会发生变化? (不是订单,价值观)。 我知道关于这个问题的信息不多,但这就是我所能说的,我不知道如何更好地解释它,抱歉。
由于
答案 0 :(得分:4)
首先,您的尺寸检查已关闭
// check size
// if (leftSet.size() != leftSet.size()) {
if (leftSet.size() != rightSet.size()) {
return false;
}
接下来,我不相信您的isEqual
方法 - 请Override
Object.equals(Object)
,
// if (isEqual(currLeft, currRight)) {
if (currLeft.equals(currRight)) {
return true; // <-- and just short-circuit with return true!
}
return false;
循环后显然for
,您可以消除found
。