Commit 82966b3beb0793e42b9188e46e4b6ee9ab9000de
1 parent
0bedf9bb
Exists in
master
optimized UtilObject
Showing
2 changed files
with
103 additions
and
3 deletions
Show diff stats
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; | ... | ... |