我有一个地址对象,我想创建一个equals方法。我可以通过做类似下面的事情来简化它(缩短一点):Java:在等号检查中避免NullPointerException的干净方式
public boolean equals(Object obj)
{
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Address other = (Address) obj;
return this.getStreet().equals(other.getStreet())
&& this.getStreetNumber().equals(other.getStreetNumber())
&& this.getStreetLetter().equals(other.getStreetLetter())
&& this.getTown().equals(other.getTown());
}
问题是,其中一些可能为空。换句话说,如果在此地址中没有街道信件,我将获得NullPointerException
。
如何在考虑空值的同时以干净的方式编写此代码?
使用* @NotNull *注释无处不在肯定会有所帮助。因此,使用空字符串和空数组,而不是空字符串和空数组来表示“空”的东西。空字符串是不包含字符的字符串。一个空数组是一个由零元素组成的数组。在我们的代码库中,“null”和NPE非常少见,其中* @NotNull *注释在我们所有的每个类中都有使用:) – SyntaxT3rr0r 2011-04-14 10:52:01
除此之外,与可变对象“相等”的概念没有多大意义。使你的对象不可变。禁止空。一切都会更顺畅。 – SyntaxT3rr0r 2011-04-14 10:53:24
当然,如果我能的话,我会!问题在于,在这种情况下,这些东西*可能不存在。例如,并非所有地址都有一个字母,所以它应该是空的。关于不变性问题,我完全同意,但不幸的是,这不是我的选择。如果这取决于我,那会是。 – Svish 2011-04-14 11:05:46