Javers 比较 String null 和 "" empty String

Javers compare String null and "" empty String

是否可以配置 Javers,以便在比较具有值为 null 或 ""(空)字符串的字符串 属性 的两个对象时不会发现任何差异。基本上将 null 和 "" 空字符串视为相同。 例如:

Class Phone 
{
    String phoneNumber;
    Phone(phoneNumber)
    {
         this.phoneNumber = phoneNumber;
    }

}
Phone phoneNumber = new PhoneNumber("");
Phone phoneNumber1 = new PhoneNumber(null);

我希望当 Javers 比较这两个对象时,不会显示出任何差异。

您可以覆盖 java 中的 equals 方法。示例代码如下。

import java.util.*; 
import java.io.*;

class Phone 
{
    String phoneNumber;
    Phone(String phoneNumber)
    {
         this.phoneNumber = phoneNumber;
    }

    public boolean equals(Object object) {
        if(object instanceof Phone) {
            String phoneNumber = ((Phone)object).phoneNumber;
            if(Utility.isNullOrEmpty(phoneNumber) && Utility.isNullOrEmpty(this.phoneNumber)) {
               return true; 
            } else if ( phoneNumber != null && phoneNumber.equals(this.phoneNumber)) {
                return true; 
            } else if ( this.phoneNumber != null && this.phoneNumber.equals(phoneNumber)){
                 return true; 
            }
            return false;
        } else {
            return false;
        }
    }

}


class Main {  

  public static void main (String[] args) {  
    // keep this function call here     
      Phone ph1 = new Phone("");
      Phone ph2 = new Phone(null);

      if(ph1.equals(ph2)) {
          System.out.println("ph1 and ph2 are equal.");
      }

      Phone ph3 = new Phone("123456789");
      Phone ph4 = new Phone("123456789");

      if(ph3.equals(ph4)) {
          System.out.println("ph3 and ph4 are equal.");
      }

      if(ph3 == ph2) {
          System.out.println("ph3 and ph2 are equal.");
      } else {
          System.out.println("ph3 and ph2 are not equal.");
      }
  }   

}

class Utility {

    public static boolean isNullOrEmpty(String str) {
        return (str == null || str.isEmpty());
    }

}

您可以为值注册自定义比较器。 JaVers 文档对此进行了解释 - https://javers.org/documentation/domain-configuration/#ValueType

Javers javers = JaversBuilder.javers()
        .registerValue(String.class, (a, b) ->  StringUtils.equals(a,b)).build();