Svi*_*ish 20 java coding-style equals nullpointerexception
我有一个地址对象,我想为其创建一个equals方法.我可以通过做类似下面的事情(缩短一点)使这变得非常简单:
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());
}
Run Code Online (Sandbox Code Playgroud)
问题是,其中一些可能是空的.换句话说,NullPointerException如果此地址中没有街道信件,我会得到一个.
如何在考虑空值的情况下以干净的方式编写此文件?
Pet*_*rey 15
您可以使用辅助方法
public static boolean isEqual(Object o1, Object o2) {
return o1 == o2 || (o1 != null && o1.equals(o2));
}
Run Code Online (Sandbox Code Playgroud)
您可以执行以下操作:
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 equals(this.getStreet(),other.getStreet())
&& equals(this.getStreetNumber(), other.getStreetNumber())
&& equals(this.getStreetLetter(), other.getStreetLetter())
&& equals(this.getTown(), other.getTown());
}
private boolean equals(Object control, Object test) {
if(null == control) {
return null == test;
}
return control.equals(test);
}
Run Code Online (Sandbox Code Playgroud)
Java 7引入了对java.util.Objects类的用例的内置支持,请参阅:
Google Guava提供了Objects.equal(Object,Object),它检查相等性,同时考虑到其中任何一个参数可能为null:
...
return Objects.equal(this.getStreet(), other.getStreet())
&& Objects.equal(this.getStreetNumber(), other.getStreetNumber())
&& Objects.equal(this.getStreetLetter(), other.getStreetLetter())
&& Objects.equal(this.getTown(), other.getTown());
Run Code Online (Sandbox Code Playgroud)
值得指出的是,Objects还有其他辅助方法来实现 hashCode()和toString().
| 归档时间: |
|
| 查看次数: |
15290 次 |
| 最近记录: |