1.本例使用的是ideajava
首先須要在idea中安裝lombok插件,省略getter和setter方法的書寫maven
在maven項目中加入lombok依賴ide
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.10</version> </dependency>
2.創建兩個實體類:工具
import lombok.Data; /** * @author yangchao * @version V1.0 * @Description: 第一個測試實體類:做爲資源實體類 * @date 2018/10/9 */ @Data public class FirstPerson { private String name; private int age; }
import lombok.Data; import java.math.BigDecimal; /** * @author yangchao * @version V1.0 * @Description: 第一個測試實體類:做爲目標實體類 * @date 2018/10/9 */ @Data public class SecondPerson { private String name; private int age; private BigDecimal cost; }
3.利用反射進行對象之間字段的轉換工具:測試
/** * @author yangchao * @return void * @date 2018/十、9 * @Description: 將srcObj對象字段的值拷貝到destObj字段(前提:兩個對象中的字段名相同時) * 其實就是經過反射將值先存在map中,在遍歷set進目標對象 */ public static void copyFieldToBean(Object srcObj,Object destObj){ Map<String, Object> srcMap = new HashMap<String, Object>(); Field[] srcFields = srcObj.getClass().getDeclaredFields(); for (Field srcField : srcFields) { try { srcField.setAccessible(true); srcMap.put(srcField.getName(), srcField.get(srcObj)); //獲取屬性值 } catch (Exception e) { e.printStackTrace(); } } Field[] destFields = destObj.getClass().getDeclaredFields(); for (Field destField : destFields) { destField.setAccessible(true); if (srcMap.get(destField.getName()) == null) { continue; } try { destField.set(destObj, srcMap.get(destField.getName())); //給屬性賦值 } catch (Exception e) { e.printStackTrace(); } } }
4.測試方法和結果:idea
public static void main(String[] args) { FirstPerson firstPerson = new FirstPerson(); SecondPerson secondPerson = new SecondPerson(); firstPerson.setAge(20); firstPerson.setName("張三"); copyFieldToBean(firstPerson,secondPerson); Field[] fds = secondPerson.getClass().getDeclaredFields(); for (Field fd : fds) { try { fd.setAccessible(true); System.out.println(fd.getName() + "=" + fd.get(secondPerson)); } catch (Exception e) { e.printStackTrace(); } } }
name=張三 age=20 cost=null