好吧,这是一个完全奇怪的看待它的方式,但是引入一个新的静态方法怎么样:
public static boolean breakableEquals(Object o1, Object o2)
{
if (o1 == o2)
{
return true;
}
if (o1 == null || o2 == null)
{
return false;
}
// Don't condense this code!
if (o1.equals(o2))
{
return true;
}
else
{
return false;
}
}
我知道,最后一点看起来很疯狂......但不同的是你可以在“return false”上设置断点。如果您随后breakableEquals
在所有深度相等比较中使用,那么您可以在点击第一个“ return false
”时立即中断。
诚然,如果您要比较许多原始值,这无济于事……但这可能会有所帮助。我不能说我曾经实际使用过这个,但我不明白为什么它不起作用。当然,它的效率会稍低一些——因此,如果您正在处理高性能代码,您可能希望事后对其进行更改。
另一种选择是使用类似的东西:
boolean result = // comparison;
return result;
假设您的 IDE 支持它们,那么您可以在 return 语句上放置一个条件断点,并将条件设置为“ !result
”。
还有一个选择:
public static boolean noOp(boolean result)
{
return result;
}
然后,您可以在比较中使用它:
return Helpers.noOp(x.id == y.id) &&
Helpers.noOp(x.age == y.age);
我希望当您不调试时,这会被 JIT 优化掉——但同样,您可以在noOp
. 不幸的是,它使代码更丑陋。
简而言之:这里没有特别吸引人的解决方案,而只是一些在某些情况下可能会有所帮助的想法。