繁体   English   中英

如何比较两个复杂的对象并忽略空字符串和空字符串?

[英]How to compare two complex object and ignore both null and empty string?

我需要声明两个复杂的对象,其中可能包含原始对象和n个对象。 所以我用谷歌搜索并选择了一个unitils图书馆。 但是我有一个条件,我需要将null和空字符串都视为相等。但是这里它仅支持ReflectionComparatorMode.IGNORE_DEFAULTS 场景:

 public class AssertVerify {

    public static void main(String args[]){

    CustomerPojo cuPojo1=new CustomerPojo();
    CustomerPojo cuPojo2=new CustomerPojo();

    cuPojo1.setCustomerName("obuli");
    cuPojo1.setCustomerAge("20");
    cuPojo1.setAddress("");

    cuPojo2.setCustomerName("obuli");
    cuPojo2.setCustomerAge("20");


    /**
     * Asserting  two pojos
     */     
    ReflectionAssert.assertReflectionEquals(cuPojo1, cuPojo2,
            ReflectionComparatorMode.LENIENT_DATES ,ReflectionComparatorMode.IGNORE_DEFAULTS);

}       

错误:

 junit.framework.AssertionFailedError: 
 Expected: CustomerPojo<customerName="obuli", customerAge="20", Address="">
  Actual: CustomerPojo<customerName="obuli", customerAge="20", Address=null>

  --- Found following differences ---
  Address: expected: "", actual: null

   --- Difference detail tree ---
  expected: CustomerPojo<customerName="obuli", customerAge="20", Address="">
   actual: CustomerPojo<customerName="obuli", customerAge="20",   Address=null>

  Address expected: ""
  Address   actual: null


   at junit.framework.Assert.fail(Assert.java:47)
    at      org.unitils.reflectionassert.ReflectionAssert.assertReflectionEquals(ReflectionA   ssert.java:136)at       org.unitils.reflectionassert.ReflectionAssert.assertReflectionEquals(ReflectionA   ssert.java:99)
atcom.assertion.verify.AssertVerify.main(AssertVerify.java:52) 

 picked up _JAVA_OPTIONS: -Djava.net.preferIPv4Stack=true

我需要添加一个将空字符串和空字符串视为相等的规则。

有没有可能针对我的情况的解决方案。

正如Gremash提到的那样,您应该实现可比的接口并覆盖equals方法,不要着急,确保您知道自己在做什么,因为当您使用实现此接口的自己的对象并使用您的方法时,可能会使集合中的工作混乱。在Core Java 1-2系列中(如果可能的话)对此问题进行了讨论,并对其进行了详细说明。 有一些规则,例如equals()必须定义一个等价关系(它必须是自反的,对称的和可传递的),此外: 在Java中重写equals和hashCode时应考虑哪些问题?

我认为最好还是采用这种方式,然后再依赖其他库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM