From 8d7a06172a7aba4332aa64b16bda3a9b083f932e Mon Sep 17 00:00:00 2001 From: 王彬 Date: Mon, 23 Sep 2019 20:36:23 +0800 Subject: [PATCH] 1.fix a bug about final field --- build.gradle | 2 +- src/main/java/com/taover/util/UtilObject.java | 40 +++++++++++++++++++++++++++++++++++++--- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index a6eb499..425b9c1 100644 --- a/build.gradle +++ b/build.gradle @@ -54,7 +54,7 @@ uploadArchives { authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD) } pom.project { - version '1.1.4' + version '1.1.5' artifactId ARTIFACT_Id groupId GROUP_ID packaging TYPE diff --git a/src/main/java/com/taover/util/UtilObject.java b/src/main/java/com/taover/util/UtilObject.java index 3231634..2c628d9 100644 --- a/src/main/java/com/taover/util/UtilObject.java +++ b/src/main/java/com/taover/util/UtilObject.java @@ -1,6 +1,7 @@ package com.taover.util; import java.lang.reflect.Field; +import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -81,6 +82,11 @@ public class UtilObject { if(nameIndex == -1){ continue; }else{ + //如果是final关键词修饰,则返回 + if(Modifier.isFinal(destField[nameIndex].getModifiers())){ + continue; + } + //如果源field与目标field数据类型相同,则将sourceFieldValue赋值给目标对象 if(sourceFieldType.equals(destFieldTypeArray[nameIndex])){ destField[nameIndex].setAccessible(true); @@ -159,6 +165,11 @@ public class UtilObject { if(nameIndex == -1){ continue; }else{ + //如果是final关键词修饰,则返回 + if(Modifier.isFinal(destField[nameIndex].getModifiers())){ + continue; + } + //如果源field与目标field数据类型相同,则将sourceFieldValue赋值给目标对象 if(sourceFieldType.equals(destFieldTypeArray[nameIndex])){ destField[nameIndex].setAccessible(true); @@ -289,6 +300,12 @@ public class UtilObject { Field keyField = beanClass.getDeclaredField(camelName); String keyTypeName = keyField.getType().getSimpleName(); + + //如果是final关键词修饰,则返回 + if(Modifier.isFinal(keyField.getModifiers())){ + continue; + } + if(keyTypeName.equals("String")){ keyField.set(result, keyValue.toString()); }else if(keyTypeName.equals("Integer")){ @@ -315,6 +332,12 @@ public class UtilObject { try { Field keyField = beanClass.getDeclaredField(camelName); + + //如果是final关键词修饰,则返回 + if(Modifier.isFinal(keyField.getModifiers())){ + continue; + } + keyField.setAccessible(true); keyField.set(result, keyValue); } catch (Exception e) { @@ -327,7 +350,7 @@ public class UtilObject { public static void main(String args[]){ class Temp2{ - Integer a; + final Integer a; Integer c; public Temp2(Integer a, Integer c){ this.a = a; @@ -357,7 +380,18 @@ public class UtilObject { Temp temp3 = new Temp(5,6); Temp2 temp4 = new Temp2(7,8); - fieldCopy(temp1, temp2, false, null,false); + try { + Field a= temp4.getClass().getDeclaredField("a"); + System.out.print(Modifier.isFinal(a.getModifiers())); + } catch (NoSuchFieldException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (SecurityException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + /*fieldCopy(temp1, temp2, false, null,false); System.out.println(temp1.toString()); System.out.println(temp2.toString()); @@ -368,6 +402,6 @@ public class UtilObject { List temp = UtilObject.fieldToArray(temp1, false, new String[]{"b"}); for(int i=0; i