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();
是否可以配置 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();