阅读量:0
为了避免在 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
方法不会因为空指针异常而导致程序崩溃。