以下代码的Java片段使我有些困惑。该方法正在尝试使用标准.equals()
方法来表示两个对象是否不是相等的,以表示它们是相等的。此外,布尔值可以确定两个空的零值是否相等。我想知道:
- 这种方法中的布尔逻辑确实是正确的吗?
- 可以以某种方式省略中间块中的
return
语句。是否可以更简洁或其他方式重写此逻辑,也许会放弃空的回报,但要保持高度的人类可读性?
摘要:
public static void verifyVariableIsNotEqualTo(Object variable, Object otherVariable, boolean considerBothNullAsEqual)
{
if(considerBothNullAsEqual && variable == null && otherVariable == null)
{
throw new Exception("not allowed to be equal");
}
if(variable == null || otherVariable == null)
{
return;
}
if(variable.equals(otherVariable))
{
throw new Exception("not allowed to be equal");
}
}
是的,该方法中的逻辑是正确的。如果两个对象相等,它会引发异常。您可以删除第二个条件并将其与第三个条件结合在一起,但我看不到太多。如果您这样做了,方法可能看起来像这样。
public static void verifyVariableIsNotEqualTo(Object variable, Object otherVariable, boolean considerBothNullAsEqual) throws Exception
{
if(considerBothNullAsEqual && variable == null && otherVariable == null)
{
throw new Exception("not allowed to be equal");
}
if(variable != null && variable.equals(otherVariable))
{
throw new Exception("not allowed to be equal");
}
}
请注意,无需检查otherVariable
是否分别为null,因为variable
上的equals
方法如果otherVariable
为null,则应返回false。
有一种更简洁的方法来写这篇文章,但不值得考虑,因为它牺牲了可读性。