生活随笔
收集整理的這篇文章主要介紹了
使用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);????????????obj?=?type.newInstance();??????????????????????PropertyDescriptor[]?propertyDescriptors?=?beanInfo.getPropertyDescriptors();??????????????for?(int?i?=?0;?i?<?propertyDescriptors.length;?i++)?{??????????PropertyDescriptor?descriptor?=?propertyDescriptors[i];??????????String?propertyName?=?descriptor.getName();??????????if?(map.containsKey(propertyName))?{????????????????????????????Object?value?=?map.get(propertyName);????????????????Object[]?args?=?new?Object[1];????????????????????????????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;??????????????}??????????????????????????????descriptor.getWriteMethod().invoke(obj,?args);??????????}??????}??????return?obj;??}??
測試類
[java]?view plaincopy
@Test??public?void?testConvertMap()?throws?Exception?{????????????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ò),歡迎將生活随笔推薦給好友。