繁体   English   中英

使用unitils ReflectionComparator忽略字符串中的大小写

[英]Ignoring case in strings with unitils ReflectionComparator

我使用unitils工具通过ReflectionComparator进行深层对象比较:

ReflectionComparatorMode[] modes = {ReflectionComparatorMode.LENIENT_ORDER, ReflectionComparatorMode.IGNORE_DEFAULTS};
ReflectionComparator comparator = ReflectionComparatorFactory.createRefectionComparator(modes);
Difference difference = comparator.getDifference(oldObject, newObject);

事实证明,此ReflectionComparator不会忽略String字段值中的大小写。 ReflectionComparatorMode枚举中,没有用于此目的的串行模式:

public enum ReflectionComparatorMode {
    IGNORE_DEFAULTS,
    LENIENT_DATES,
    LENIENT_ORDER
}

有什么想法,如何实现?

ReflectionComparatorMode没有模拟模仿ignore_case行为的模式。 您没有指定oldObjectnewObject的类型,但我想您可以在将它们传递给ReflectionComparator之前(将所有String字段都转换为大写或小写)进行“ 规范化 ”,或者根据oldObject的特定类型实现自己的Java Comparator和newObject

看看这个

ReflectionComparator工作方式进行调查后,得出了这个可行的解决方案。 简而言之,我们必须添加另一个特殊的Comparator对象来处理比较器链中的String对象。

此外,我们必须做一些喧闹与提取一个需要protected从静态方法ReflectionComparatorFactory为了减少代码加倍。

ReflectionComparatorMode[] modes = {ReflectionComparatorMode.LENIENT_ORDER, ReflectionComparatorMode.IGNORE_DEFAULTS};

List<org.unitils.reflectionassert.comparator.Comparator> comparators = new ArrayList<>();
    comparators.add(new Comparator() {
         @Override
         public boolean canCompare(Object left, Object right) {
               return left instanceof String && right instanceof String;
         }

         @Override
         public Difference compare(Object left, Object right, boolean onlyFirstDifference, ReflectionComparator reflectionComparator) {
               return  ((String) left).equalsIgnoreCase((String) right) ? null : new Difference("Non equal values: ", left, right);
         }
});

comparators.addAll(
    new ReflectionComparatorFactory() {
        public List<Comparator> getComparatorChainNonStatic(Set<ReflectionComparatorMode> modes) {
               return getComparatorChain(modes);
        }
    }.getComparatorChainNonStatic(asSet(modes)));

ReflectionComparator comparator = new ReflectionComparator(comparators);

暂无
暂无

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

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