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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

使用Introspector(Java内省机制)实现Map转换为JavaBean

發(fā)布時(shí)間:2024/2/28 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Introspector(Java内省机制)实现Map转换为JavaBean 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)載自?https://blog.csdn.net/u013905744/article/details/73167861

需求:

有一個(gè)Map對象

[java]?view plaincopy
  • Map<String,Object>?map?=?new?HashMap<>();??
  • map.put("name",?"bellychang");??
  • map.put("likes",?new?String[]{"football",?"basketball"});??
  • 希望實(shí)現(xiàn)一個(gè)通用方法,將其轉(zhuǎn)換為如下的JavaBean

    [java]?view plaincopy
  • public?class?SimpleBean?{??
  • ??
  • ????private?String?name;??
  • ????private?String[]?likes;??
  • ??
  • ????public?SimpleBean()?{??
  • ????}??
  • ??
  • ????public?SimpleBean(String?name,?String[]?likes){??
  • ????????this.name?=?name;??
  • ????????this.likes?=?likes;??
  • ????}??
  • ??
  • ????public?String?getName()?{??
  • ????????return?name;??
  • ????}??
  • ??
  • ????public?void?setName(String?name)?{??
  • ????????this.name?=?name;??
  • ????}??
  • ??
  • ????public?String[]?getLikes()?{??
  • ????????return?likes;??
  • ????}??
  • ??
  • ????public?void?setLikes(String[]?likes)?{??
  • ????????this.likes?=?likes;??
  • ????}??
  • ??
  • ????@Override??
  • ????public?String?toString()?{??
  • ????????return?"SimpleBean{"?+??
  • ????????????????"name='"?+?name?+?'\''?+??
  • ????????????????",?likes="?+?Arrays.toString(likes)?+??
  • ????????????????'}';??
  • ????}??
  • }??

  • 工具類

    [java]?view plaincopy
  • public?static?<T>?T?convertMap(Class<T>?type,?Map?map)?throws?IntrospectionException,?IllegalAccessException,??
  • ????????InstantiationException,?InvocationTargetException?{??
  • ????BeanInfo?beanInfo?=?null;?//?獲取類屬性??
  • ????T?obj?=?null;??
  • ????beanInfo?=?Introspector.getBeanInfo(type);??
  • ????//?創(chuàng)建?JavaBean?對象??
  • ????obj?=?type.newInstance();??
  • ??
  • ????//?給?JavaBean?對象的屬性賦值??
  • ??
  • ????//?獲取屬性的描述器(PropertyDescriptor)??
  • ????PropertyDescriptor[]?propertyDescriptors?=?beanInfo.getPropertyDescriptors();??
  • ??
  • ????//?通過這個(gè)屬性描述器就可以獲取某個(gè)屬性對應(yīng)的?getter/setter?方法,然后就可以通過反射機(jī)制來調(diào)用這些方法??
  • ????for?(int?i?=?0;?i?<?propertyDescriptors.length;?i++)?{??
  • ????????PropertyDescriptor?descriptor?=?propertyDescriptors[i];??
  • ????????String?propertyName?=?descriptor.getName();??
  • ????????if?(map.containsKey(propertyName))?{??
  • ????????????//?下面一句可以?try?起來,這樣當(dāng)一個(gè)屬性賦值失敗的時(shí)候就不會(huì)影響其他屬性賦值。??
  • ????????????Object?value?=?map.get(propertyName);??
  • ??
  • ????????????Object[]?args?=?new?Object[1];??
  • ????????????//getPropertyType得到屬性類型??
  • ????????????if?(descriptor.getPropertyType()?==?Long.class)?{??
  • ????????????????args[0]?=?Long.parseLong(value.toString());??
  • ????????????}?else?if?(descriptor.getPropertyType()?==?Integer.class)?{??
  • ????????????????args[0]?=?Integer.valueOf(value.toString());??
  • ????????????}?else?{??
  • ????????????????args[0]?=?value;??
  • ????????????}??
  • ??
  • ????????????//getWriteMethod()得到此屬性的set方法----Method對象,然后用invoke調(diào)用這個(gè)方法??
  • ????????????descriptor.getWriteMethod().invoke(obj,?args);??
  • ????????}??
  • ????}??
  • ????return?obj;??
  • }??
  • 測試類

    [java]?view plaincopy
  • @Test??
  • public?void?testConvertMap()?throws?Exception?{??
  • ????//將一個(gè)Map對象轉(zhuǎn)換為JavaBean??
  • ????Map<String,Object>?map?=?new?HashMap<>();??
  • ????map.put("name",?"changliang");??
  • ????map.put("likes",?new?String[]{"football",?"basketball"});??
  • ????SimpleBean?simpleBean?=?BeanToMapUtil.convertMap(SimpleBean.class,?map);??
  • ????System.out.println(simpleBean);??
  • }??
  • 注意事項(xiàng):

    1. Map的key與JavaBean的key一致

    2. JavaBean中要有空的構(gòu)造函數(shù),以及get,set方法

    參考:java 中的內(nèi)省機(jī)制

    總結(jié)

    以上是生活随笔為你收集整理的使用Introspector(Java内省机制)实现Map转换为JavaBean的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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