美文网首页
2、泛型方法

2、泛型方法

作者: ltjxwxz | 来源:发表于2017-05-11 17:02 被阅读0次

从来没写过泛型方法,这次项目中用到了。
泛型方法理解:
(1)对比泛型类,List<E>,我的理解是:泛型为了防止不必要的强制类型转换,降低出错几率。
(2)public static <T> void verifyObject(T actualObject, T expectObject, List<Object> ignore) {...}
传给这个方法什么类型,它就是什么类型,不需要类型转换。
如果此处换成verifyObject(Object actualObject)... 使用时可能需要强制类型转换

    /**
     * 比较两个list中每个对象的每个属性(被忽略的除外)的值是否一致
     * @param actualObject
     * @param expectObject
     * @param ignore
     */
    public static <T> void verifyObject(T actualObject, T expectObject, List<Object> ignore) {
        try {
            List<Object> actualList = new ArrayList<Object>();
            List<Object> expectList = new ArrayList<Object>();
            // 判断actualObject的类型,如果是List,就强制转换成List,如果不是,就放到一个List里面
            if(actualObject instanceof List && expectObject instanceof List) {
                actualList = (List<Object>)actualObject;
                expectList = (List<Object>)expectObject;
            } else {
                actualList.add(actualObject);
                expectList.add(expectObject);
            }
            // 如果为空,不校验
            if((actualList == null && expectList == null)) {
                return ;
            } else {
                for(int j=0; j<actualList.size(); j++) {
                    Object actual = actualList.get(j);
                    Object expect = expectList.get(j);
                    if(actual == null && expect == null) {
                        return ;
                    }
                    verifySingleObject(actual, expect, ignore);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            String errorMessage = "表里的记录和预期记录验证不一致";
            Assert.fail(errorMessage);
        }
    }
    
    /**
     * 比较两个对象的属性值是否一致
     * @param actual
     * @param expect
     * @param ignore
     */
    private static void verifySingleObject(Object actual, Object expect, List<Object> ignore) {
        try {
            Class cla = actual.getClass();
            Field[] actualFields = actual.getClass().getDeclaredFields();
            Field[] expectFields = expect.getClass().getDeclaredFields();
            // 遍历get方法
            for(Field f : actualFields) {
                pd = new PropertyDescriptor(f.getName(), cla);
                getMethod = pd.getReadMethod();
                if(ignore==null || ignore.contains(getMethod.invoke(actual))) {
                    Assert.assertEquals(getMethod.invoke(actual), getMethod.invoke(expect), 
                            "["+getMethod.getName()+"]实际值:"+getMethod.invoke(actual) + "和预期值:" + getMethod.invoke(expect) + "验证不一致");
                }
            }
        } catch (Exception e) {
            logger.error(e.getMessage());
            String errorMessage = "表里的记录和预期记录验证不一致";
            Assert.fail(errorMessage);
        }finally{
            pd = null;
            getMethod =null;
        }
    }

相关文章

  • 三泛型的使用

    1.泛型类和泛型方法 (1)格式 (2)示例例如a.泛型类 b.实现方法 2.泛型接口和泛型方法 (1)格式 (2...

  • 泛型

    一、泛型类、泛型接口和泛型方法1、泛型接口的定义: 2、两种泛型类的定义:(1) (2) 3、泛型方法的定义,可以...

  • Java 泛型

    泛型类 例如 泛型接口 例如 泛型通配符 泛型方法 类中的泛型方法 泛型方法与可变参数 静态方法与泛型 泛型上下边...

  • V语言学习笔记-14泛型

    目前的泛型主要有这三种:泛型结构体,泛型函数,泛型方法 泛型结构体 泛型函数 判断2个数组是否相等的泛型函数 泛型方法

  • Java-Java泛型(Generic)

    一.定义泛型 1.泛型类(作用范围是整个类) 2.泛型方法(作用范围是整个方法) 二.泛型边界 简书: http:...

  • Java泛型(黑马程序员武汉中心)

    Java泛型 一、概述 1、泛型含义 2、泛型好处 3、泛型分类 二、常见的泛型案例 1、泛型方法 A.定义时 B...

  • 15 泛型

    1.泛型类 2.泛型方法 3.擦除

  • Java基础(1)泛型

    1、泛型:泛化的类型,可以在调用时自己定义的一种参数类型; 2、泛型方法:public T 方法名是泛型方法...

  • 泛型的使用

    泛型有三种使用方式,分别为:泛型类、泛型接口、泛型方法 泛型类 泛型接口 泛型通配符 泛型方法 静态方法与...

  • 想理解泛型吗?看这一篇就够了!

    一、前言二、泛型类2.1 概述Java中泛型使用情况大致包括三种:泛型类、泛型接口、泛型方法 本节演示泛型类。 2...

网友评论

      本文标题:2、泛型方法

      本文链接:https://www.haomeiwen.com/subject/yqivtxtx.html