# 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