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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

用反射去构建一个对象吧!

發(fā)布時(shí)間:2025/5/22 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用反射去构建一个对象吧! 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??

比如想把 A (以下稱modelWantToCast)的所有字段 賦值給B(以下稱modelCastTo) 【需要字段名一樣】

public static <T> T castModelToAnotherModel(Object modelWantToCast, Class<T> modelCastToClazz) {if (modelWantToCast == null) {return null;}// 粗暴地獲取A的所有方法Method[] dtoMethod = modelWantToCast.getClass().getDeclaredMethods();String getMethodName;T modelCastTo = null;try {// 實(shí)例化這個(gè)BmodelCastTo = modelCastToClazz.newInstance();} catch (InstantiationException | IllegalAccessException e) {e.printStackTrace();}for (Method getMethod : dtoMethod) {getMethodName = getMethod.getName();if (getMethodName.indexOf("get", 0) == -1) {continue;}...... 代碼在下面}return modelCastTo;}

1、之前經(jīng)常用的很逗的方法

  • 獲取它的get set方法
  • 從A中g(shù)et出來
  • 通過set方法set到A中去
String setMethodName = "set" + getMethodName.substring(3, getMethodName.length());// 獲取set方法名字Object value = null;// 取值try {value = getMethod.invoke(modelWantToCast);} catch (IllegalAccessException | InvocationTargetException e) {e.printStackTrace();}Class parameterTypes = getMethod.getReturnType();// 取參數(shù)的類Method setMethod;try {// 獲取set方法setMethod = modelCastToClazz.getDeclaredMethod(setMethodName, parameterTypes);} catch (NoSuchMethodException | SecurityException e) {continue;}try {// 粗暴地invoke進(jìn)去setMethod.invoke(modelCastTo, value);} catch (IllegalAccessException | InvocationTargetException e) {e.printStackTrace();}

2、后來發(fā)現(xiàn)還有更加粗暴的方法

  • 獲取對(duì)象它get方法
  • 從A中g(shù)et出來
  • 從field直接set進(jìn)去
try {Object value = getMethod.invoke(modelWantToCast);// 取值if (value == null) {continue;}String fileName = getFileNameFromGetterOrSetter(getMethodName); // 從get方法獲取屬性名Field field = modelCastToClazz.getDeclaredField(fileName);field.setAccessible(true);field.set(modelCastTo, value);// 直接塞進(jìn)去} catch (NoSuchFieldException | IllegalAccessException | InvocationTargetException e) {e.printStackTrace();}

轉(zhuǎn)載于:https://my.oschina.net/anur/blog/1616022

總結(jié)

以上是生活随笔為你收集整理的用反射去构建一个对象吧!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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