• CompareUtil


    java
    package com.daojia.beauty.open.utils;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import java.lang.reflect.Method;
    import java.util.Comparator;
    
    /**
     * 数据比较<br />
     */
    public class CompareUtil {
    
        private static final Logger LOGGER = LoggerFactory.getLogger(CompareUtil.class);
    
        /**
         *
         */
        private CompareUtil() {
    
        }
        /**
         * 数据比较
         * @param compare1
         * @param compare2
         * @param <T>
         * @return 0-->相等 , >0 小于 , <0 大于 , null --> 异常情况
         */
        public static <T> Integer compare(T compare1 , T compare2 ) {
            if(compare1.getClass() != compare2.getClass()) {
                throw new IllegalArgumentException("参与比较的两个对象必须属于一个类");
            }
    
            Method method = isComparable(compare1.getClass()) ;
    
            Integer results = null ;
    
            if(method == null) {
                throw new UnsupportedOperationException("当前类没有实现Comparable或Comparator接口");
            }
            try {
                results =  (Integer)method.invoke(compare1, compare2);
                return results;
            }catch (Exception e) {
                LOGGER.error("反射比较对象大小出现异常",e);
            }
            return results;
        }
    
        /**
         * 判断是否可比较
         * @return
         */
        private static Method isComparable(Class cls) {
    
            Class[] interfaces = cls.getInterfaces();
            Method method = null;
            try {
                for (Class cs : interfaces) {
                    if (cs == Comparable.class) {
                        method = cls.getMethod("compareTo", cls);
                    }
                    if (cs == Comparator.class) {
                        method = cls.getMethod("compare",cls);
                    }
                }
            } catch (Exception exception) {
                LOGGER.error("反射获取比较对象的compareTo和compare方法出错",exception);
            }
            return method;
        }
    }
  • 相关阅读:
    重载的概念和体现形式
    构造方法的概述和使用
    可变长参数
    成员方法的定义
    Point类的定义
    Person类的定义
    类和对象以及引用的定义
    高数学习----微积分
    高数学习----向量代数和空间解析几何
    一个无法解析的外部命令and无法解析的外部符号
  • 原文地址:https://www.cnblogs.com/boothsun/p/5842759.html
Copyright © 2020-2023  润新知