我有一個地址對象,我想創建一個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