为了避免在 Java 中的 equals
方法中出现空指针异常(NullPointerException),你可以采取以下策略:
使用 Objects.equals()
方法:
从 Java 7 开始,java.util.Objects
类提供了一个静态方法 equals()
,它可以帮助你避免空指针异常。这个方法会在比较之前检查两个参数是否为 null。
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
MyClass myClass = (MyClass) obj;
return Objects.equals(field1, myClass.field1) &&
Objects.equals(field2, myClass.field2);
}
使用 Apache Commons Lang3:
Apache Commons Lang3 库提供了一个名为 EqualsBuilder
的类,它可以帮助你编写不抛出空指针异常的 equals
方法。
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
MyClass myClass = (MyClass) obj;
return new EqualsBuilder()
.append(field1, myClass.field1)
.append(field2, myClass.field2)
.isEquals();
}
显式检查 null 值: 在比较字段之前,显式地检查它们是否为 null。
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
MyClass myClass = (MyClass) obj;
if (field1 != null ? !field1.equals(myClass.field1) : myClass.field1 != null) return false;
if (field2 != null ? !field2.equals(myClass.field2) : myClass.field2 != null) return false;
return true;
}
使用 Java 14 中的 record
类型:
如果你正在使用 Java 14 或更高版本,可以考虑使用新引入的 record
类型。record
类型自动为你生成一个不会抛出空指针异常的 equals
和 hashCode
方法。
public record MyClass(String field1, String field2) {}
通过采用上述策略,你可以确保 equals
方法不会因为空指针异常而导致程序崩溃。