java将一个对象赋值给另一个对象_java一个对象赋值给另一个对象,支持平铺类和层级类间的互转...
場景:將一個層級類對象(領域驅動model對象)轉換為平鋪類對象(view)
src對象,(紅框為子對象)
target對象(平鋪對象)
代碼思路,先遞歸反射遍歷出所有字段,存到一個map里,再遞歸賦值給target對象
缺陷:不同子對象間的同名字段會被覆蓋成一個值
代碼
private static void getSrcALLFieldMap(Object obj,Map collectMap){
Class srcClazz = obj.getClass();
Field[] srcFields = srcClazz.getDeclaredFields();
Stream.of(srcFields).forEach(field -> {
field.setAccessible(true);
try {
if(field.getType().toString().contains("aacoin.account") && !field.getType().isEnum()){
Object subObj = field.get(obj);
if(subObj!=null)
getSrcALLFieldMap(subObj,collectMap);
}else{
collectMap.put(field.getName(),field.get(obj));
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
});
}
private static void setTargetAllField(Object obj, Map srcMap){
Class srcClazz = obj.getClass();
Field[] srcFields = srcClazz.getDeclaredFields();
Stream.of(srcFields).forEach(field -> {
field.setAccessible(true);
try {
if(field.getType().toString().contains("aacoin.trade.otc") && !field.getType().isEnum()){
Object subObj = field.get(obj);
if(subObj == null) {
Constructor cons = field.getType().getDeclaredConstructor(null);
cons.setAccessible(true);
subObj = cons.newInstance(null);
field.set(obj, subObj);
}
setTargetAllField(subObj, srcMap);
}else{
//collectMap.put(field,obj);
Object currentField = srcMap.get(field.getName());
if( currentField !=null && field.getType() == currentField.getClass()){
field.set(obj,currentField);
}
}
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
});
}
public static T convert(Object src,Class tClass){
Constructor cons = null;
try {
cons = tClass.getDeclaredConstructor(null);
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
cons.setAccessible(true);
T result = null;
try {
result = cons.newInstance(null);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
convert(src,result);
return result;
}
public static T convert(Object src,T result) {
Map srcMap = new HashMap();
getSrcALLFieldMap(src,srcMap);
setTargetAllField(result,srcMap);
return result;
}
調用:
adverVO =convert(advert,AdvertVO.class);
寫的比較隨意,直接吞掉了異常,需自行處理,將異常統一規范拋出
希望與廣大網友互動??
點此進行留言吧!
總結
以上是生活随笔為你收集整理的java将一个对象赋值给另一个对象_java一个对象赋值给另一个对象,支持平铺类和层级类间的互转...的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: MySQL占用系统进程_MySQL的Sl
- 下一篇: python 通信模块_python 多
