如何避免Java equals方法的空指针异常

avatar
作者
猴君
阅读量:0

为了避免在 Java 中的 equals 方法中出现空指针异常(NullPointerException),你可以采取以下策略:

  1. 使用 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); } 
  2. 使用 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(); } 
  3. 显式检查 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; } 
  4. 使用 Java 14 中的 record 类型: 如果你正在使用 Java 14 或更高版本,可以考虑使用新引入的 record 类型。record 类型自动为你生成一个不会抛出空指针异常的 equalshashCode 方法。

    public record MyClass(String field1, String field2) {} 

通过采用上述策略,你可以确保 equals 方法不会因为空指针异常而导致程序崩溃。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!