Commit 82966b3beb0793e42b9188e46e4b6ee9ab9000de

Authored by 王彬
1 parent 0bedf9bb
Exists in master

optimized UtilObject

src/main/java/com/taover/util/UtilObject.java
... ... @@ -2,7 +2,9 @@ package com.taover.util;
2 2  
3 3 import java.lang.reflect.Field;
4 4 import java.util.ArrayList;
  5 +import java.util.Iterator;
5 6 import java.util.List;
  7 +import java.util.Map;
6 8  
7 9 public class UtilObject {
8 10 /**
... ... @@ -96,7 +98,81 @@ public class UtilObject {
96 98 }
97 99  
98 100 return newDest;
99   - }
  101 + }
  102 +
  103 + /**
  104 + * 将源对象source字段赋值到对象dest字段,条件1字段名相同,条件2字段类型相同;
  105 + * 注:source与dest可以是两个没有关系的类,不接受基本封装类型,例如Integer
  106 + * @param source
  107 + * @param destClass
  108 + * @param allowNull
  109 + * @param exceptFieldNameArray
  110 + * @return 如果source==null或者destClass==null,则返回false
  111 + */
  112 + public static <E> E fieldCopy(Object source, Class<E> destClass, boolean allowNull, String exceptFieldNameArray[]) throws Exception{
  113 + //引用检查
  114 + if(source==null || destClass==null){
  115 + return null;
  116 + }
  117 +
  118 + //获取Field数组
  119 + Field[] sourceField = source.getClass().getDeclaredFields();
  120 + Field[] destField = destClass.getDeclaredFields();
  121 +
  122 + //获取目标对象
  123 + String[] destFieldNameArray = new String[destField.length];
  124 + String[] destFieldTypeArray = new String[destField.length];
  125 + for(int i=0; i<destField.length; ++i){
  126 + destFieldNameArray[i] = destField[i].getName();
  127 + destFieldTypeArray[i] = destField[i].getType().getName();
  128 + }
  129 +
  130 + E newDest = destClass.newInstance();
  131 +
  132 + //遍历源field数组,处理源field数组
  133 + for(int i=0; i<sourceField.length; ++i){
  134 + //获取源field相关信息
  135 + Object sourceFieldValue = null;
  136 + String sourceFieldName = sourceField[i].getName();
  137 + String sourceFieldType = sourceField[i].getType().getName();
  138 +
  139 + //获取sourceFieldValue值
  140 + sourceField[i].setAccessible(true);
  141 + try {
  142 + sourceFieldValue = sourceField[i].get(source);
  143 + } catch (Exception e1) {
  144 + e1.printStackTrace();
  145 + }
  146 +
  147 + //检查是否在exceptFieldName中
  148 + if(-1 != UtilString.getStringIndex(sourceFieldName, exceptFieldNameArray)){
  149 + continue;
  150 + }
  151 +
  152 + //检验sourceFieldValue是否为NULL
  153 + if(!allowNull && sourceFieldValue == null){
  154 + continue;
  155 + }
  156 +
  157 + //检查源field字段名是否在目标field组中存在
  158 + int nameIndex = UtilString.getStringIndex(sourceFieldName, destFieldNameArray);
  159 + if(nameIndex == -1){
  160 + continue;
  161 + }else{
  162 + //如果源field与目标field数据类型相同,则将sourceFieldValue赋值给目标对象
  163 + if(sourceFieldType.equals(destFieldTypeArray[nameIndex])){
  164 + destField[nameIndex].setAccessible(true);
  165 + try {
  166 + destField[nameIndex].set(newDest, sourceFieldValue);
  167 + } catch (Exception e) {
  168 + e.printStackTrace();
  169 + }
  170 + }
  171 + }
  172 + }
  173 +
  174 + return newDest;
  175 + }
100 176  
101 177 /**
102 178 * 将对象的所有属性转换到list数组中以objce数组存储,数组长度为2,第一个为属性名,第二个为属性值,如果对象属性值为null,则跳过该属性
... ... @@ -194,6 +270,32 @@ public class UtilObject {
194 270 }
195 271  
196 272 return result;
  273 + }
  274 +
  275 + public static <E> E mapToObject(Map<String, Object> dataMap, Class<E> beanClass, boolean isCopyNull, String exceptFieldNameArray[]) throws Exception{
  276 + if(beanClass == null){
  277 + return null;
  278 + }
  279 + E result = beanClass.newInstance();
  280 + Iterator<String> keyIter = dataMap.keySet().iterator();
  281 + while(keyIter.hasNext()){
  282 + String keyName = keyIter.next();
  283 + String camelName = UtilString.camelName(keyName);
  284 + Object keyValue = dataMap.get(keyName);
  285 +
  286 + if(keyValue == null){
  287 + continue;
  288 + }
  289 +
  290 + Field keyField = beanClass.getDeclaredField(camelName);
  291 + String keyTypeName = keyField.getType().getSimpleName();
  292 + if(keyTypeName.equals("String")){
  293 + keyField.set(result, keyValue.toString());
  294 + }else if(keyTypeName.equals("Integer")){
  295 + keyField.set(result, Integer.valueOf(keyValue.toString()));
  296 + }
  297 + }
  298 + return result;
197 299 }
198 300  
199 301 public static void main(String args[]){
... ...
src/main/java/com/taover/util/bean/ResultInfoException.java
... ... @@ -7,8 +7,6 @@ public class ResultInfoException extends Exception {
7 7 private String error;
8 8 private Object data;
9 9  
10   - private ResultInfoException(){}
11   -
12 10 protected ResultInfoException(String code, String error, Object data){
13 11 this.code = code;
14 12 this.error = error;
... ...