# ReflectUtils **Repository Path**: chenchg/ReflectUtils ## Basic Information - **Project Name**: ReflectUtils - **Description**: 利用Java反射技术实现的一些实用的工具类。 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2019-06-30 - **Last Updated**: 2020-12-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ReflectUtils 利用Java反射技术实现的一些工具类,目前提供有两个工具类:
| 名称 | 描述 | 查看源码 | |------|---------|-------| | [AttributeCopyer](#attributecopyer) | 把父类转成子类对象 | [查看源码](https://github.com/whvcse/ReflectUtils/blob/master/AttributeCopyer.java) | | [ResponseUtil](#responseutil)   | 对象转成json时只转指定的字段| [查看源码](https://github.com/whvcse/ReflectUtils/blob/master/ResponseUtil.java) | ## 一、AttributeCopyer 可以把父类转成子类对象,将父类中的属性值赋值给子类,子类特有的属性不动,使用方法: ```java //把父类F的所有属性复制给子类C static void copy(F f, C c); //把父类F克隆成子类C static C clone(F father, Class clazz); ``` 使用示例: ```java //父类的属性有 F f = new F("1","张三","男"); //子类的属性有 C c = new C("1","张三","男","1996-09-15"); C newC = AttributeCopyer.clone(f, C.getClass()); //此时的newC的属性值为:{"id": 1, "name": "张三", "sex": "男", "birthday": null} C c2 = new C(); AttributeCopyer.copy(f, c2); //此时的c2的属性值为:{"id": 1, "name": "张三", "sex": "男", "birthday": null} F f2 = new F2("2", "张三丰", "女"); AttributeCopyer.copy(f2, c); //此时的c的属性值为:{"id": 2, "name": "张三丰", "sex": "女", "birthday": "1996-09-15"} ``` Java可以把一个子类转换成它的父类,但是不能把父类转成子类,此工具类正弥补了这一不足。
使用场景:比如MyBatis中,有对象A,A外键关联了B,我们想使用A的时候使用B中的两个属性,有人会在A中临时加两个字段,也有人会再写一个AExpand继承A,加两个字段,此时数据库查询出来的是A,我们向把A变成AExpand,需要手动一大堆get、set,此工具便可以一句话把A变成AExpand,当然现在使用MyBatis的人很少这些做了,会写一大堆封装类,有的直接使用Map,此场景只是举个例子,大家可以举一反三。   ## 二、ResponseUtil 移除对象的部分属性,有时我们把对象转成json数据时,想让一部分属性不参与转换,通过此工具类可以只转换指定字段: ```java //输出对象T的指定字段fileds static Map getResultMap(T t, String[] fileds); // static List> getResultMap(List ts, String[] fileds) ``` 使用示例: ```java //输出User部分属性 User user = new User("1", "张三", 21, "男"); String[] fileds = new String[]{"name","age"}; String json = JSON.toJSONString(ResponseUtil.getResultMap(user,fileds)); //输出结果 {"name": "张三", "age": 21} ``` 使用场景:例如前端查询user的时候,我们不希望password随user一起返回给前端,虽然可以不查询password字段,但是此字段为null,并不是没有此字段,如果为了数据美观一点,可以使用此工具类,^_^!!