Commit 8d7a06172a7aba4332aa64b16bda3a9b083f932e
1 parent
cced7bb8
Exists in
master
1.fix a bug about final field
Showing
2 changed files
with
38 additions
and
4 deletions
Show diff stats
build.gradle
src/main/java/com/taover/util/UtilObject.java
1 | 1 | package com.taover.util; |
2 | 2 | |
3 | 3 | import java.lang.reflect.Field; |
4 | +import java.lang.reflect.Modifier; | |
4 | 5 | import java.util.ArrayList; |
5 | 6 | import java.util.Iterator; |
6 | 7 | import java.util.List; |
... | ... | @@ -81,6 +82,11 @@ public class UtilObject { |
81 | 82 | if(nameIndex == -1){ |
82 | 83 | continue; |
83 | 84 | }else{ |
85 | + //如果是final关键词修饰,则返回 | |
86 | + if(Modifier.isFinal(destField[nameIndex].getModifiers())){ | |
87 | + continue; | |
88 | + } | |
89 | + | |
84 | 90 | //如果源field与目标field数据类型相同,则将sourceFieldValue赋值给目标对象 |
85 | 91 | if(sourceFieldType.equals(destFieldTypeArray[nameIndex])){ |
86 | 92 | destField[nameIndex].setAccessible(true); |
... | ... | @@ -159,6 +165,11 @@ public class UtilObject { |
159 | 165 | if(nameIndex == -1){ |
160 | 166 | continue; |
161 | 167 | }else{ |
168 | + //如果是final关键词修饰,则返回 | |
169 | + if(Modifier.isFinal(destField[nameIndex].getModifiers())){ | |
170 | + continue; | |
171 | + } | |
172 | + | |
162 | 173 | //如果源field与目标field数据类型相同,则将sourceFieldValue赋值给目标对象 |
163 | 174 | if(sourceFieldType.equals(destFieldTypeArray[nameIndex])){ |
164 | 175 | destField[nameIndex].setAccessible(true); |
... | ... | @@ -289,6 +300,12 @@ public class UtilObject { |
289 | 300 | |
290 | 301 | Field keyField = beanClass.getDeclaredField(camelName); |
291 | 302 | String keyTypeName = keyField.getType().getSimpleName(); |
303 | + | |
304 | + //如果是final关键词修饰,则返回 | |
305 | + if(Modifier.isFinal(keyField.getModifiers())){ | |
306 | + continue; | |
307 | + } | |
308 | + | |
292 | 309 | if(keyTypeName.equals("String")){ |
293 | 310 | keyField.set(result, keyValue.toString()); |
294 | 311 | }else if(keyTypeName.equals("Integer")){ |
... | ... | @@ -315,6 +332,12 @@ public class UtilObject { |
315 | 332 | |
316 | 333 | try { |
317 | 334 | Field keyField = beanClass.getDeclaredField(camelName); |
335 | + | |
336 | + //如果是final关键词修饰,则返回 | |
337 | + if(Modifier.isFinal(keyField.getModifiers())){ | |
338 | + continue; | |
339 | + } | |
340 | + | |
318 | 341 | keyField.setAccessible(true); |
319 | 342 | keyField.set(result, keyValue); |
320 | 343 | } catch (Exception e) { |
... | ... | @@ -327,7 +350,7 @@ public class UtilObject { |
327 | 350 | public static void main(String args[]){ |
328 | 351 | |
329 | 352 | class Temp2{ |
330 | - Integer a; | |
353 | + final Integer a; | |
331 | 354 | Integer c; |
332 | 355 | public Temp2(Integer a, Integer c){ |
333 | 356 | this.a = a; |
... | ... | @@ -357,7 +380,18 @@ public class UtilObject { |
357 | 380 | Temp temp3 = new Temp(5,6); |
358 | 381 | Temp2 temp4 = new Temp2(7,8); |
359 | 382 | |
360 | - fieldCopy(temp1, temp2, false, null,false); | |
383 | + try { | |
384 | + Field a= temp4.getClass().getDeclaredField("a"); | |
385 | + System.out.print(Modifier.isFinal(a.getModifiers())); | |
386 | + } catch (NoSuchFieldException e) { | |
387 | + // TODO Auto-generated catch block | |
388 | + e.printStackTrace(); | |
389 | + } catch (SecurityException e) { | |
390 | + // TODO Auto-generated catch block | |
391 | + e.printStackTrace(); | |
392 | + } | |
393 | + | |
394 | + /*fieldCopy(temp1, temp2, false, null,false); | |
361 | 395 | System.out.println(temp1.toString()); |
362 | 396 | System.out.println(temp2.toString()); |
363 | 397 | |
... | ... | @@ -368,6 +402,6 @@ public class UtilObject { |
368 | 402 | List<Object[]> temp = UtilObject.fieldToArray(temp1, false, new String[]{"b"}); |
369 | 403 | for(int i=0; i<temp.size(); ++i){ |
370 | 404 | System.out.println(temp.get(i)[0]+":"+temp.get(i)[1]); |
371 | - } | |
405 | + } */ | |
372 | 406 | } |
373 | 407 | } |
374 | 408 | \ No newline at end of file | ... | ... |