日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java将一个对象赋值给另一个对象_java一个对象赋值给另一个对象,支持平铺类和层级类间的互转...

發(fā)布時間:2024/7/19 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java将一个对象赋值给另一个对象_java一个对象赋值给另一个对象,支持平铺类和层级类间的互转... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

場景:將一個層級類對象(領(lǐng)域驅(qū)動model對象)轉(zhuǎn)換為平鋪類對象(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;

}

調(diào)用:

adverVO =convert(advert,AdvertVO.class);

寫的比較隨意,直接吞掉了異常,需自行處理,將異常統(tǒng)一規(guī)范拋出

希望與廣大網(wǎng)友互動??

點(diǎn)此進(jìn)行留言吧!

總結(jié)

以上是生活随笔為你收集整理的java将一个对象赋值给另一个对象_java一个对象赋值给另一个对象,支持平铺类和层级类间的互转...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。