此方法可以转化不同的字段
package com.xindong.utils;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @Description
* @Author 丁新东
* @Date 9:24 2020/12/28
*/
public class FieldConversionUtil {
/**
* 字段转换
*
* @param mapCon map的key为源实体类的字段英文名 value为目标实体类英文名 注意:这个主要是为了转化不同的字段
* @param source 源实体类
* @param target 目标实体类
* @param <T> 返回结果
* @return
* @throws Exception
*/
public static <T> T fieldConversion(Map<String, String> mapCon, Object source, Class<T> target) throws Exception {
T tar = target.newInstance();
Class<?> aClass = source.getClass();
Field[] fieldsSou = aClass.getDeclaredFields();
Field[] declaredFields = target.getDeclaredFields();
List<String> strResult = new ArrayList<>();
for (int i = 0; i < declaredFields.length; i++) {
Field field = declaredFields[i];
field.setAccessible(true);
strResult.add(field.getName());
}
for (int i = 0; i < fieldsSou.length; i++) {
Field field = fieldsSou[i];
field.setAccessible(true);
String name = field.getName();
if (mapCon.containsKey(name)) {
name = mapCon.get(name);
}
if (!strResult.contains(name)) {
continue;
}
Field declaredField = target.getDeclaredField(name);
declaredField.setAccessible(true);
declaredField.set(tar, field.get(source));
}
return tar;
}
}